Как вызвать кнопку HTML при нажатии Enter в текстовом поле?

106

Итак, код, который у меня есть, таков:

<fieldset id="LinkList">
    <input type="text" id="addLinks" name="addLinks" value="http://">
    <input type="button" id="linkadd" name="linkadd" value="add">
</fieldset>

Это не в a, <form>а точно так же, как внутри <div>. Однако, когда я textboxввожу что-то в вызываемые «addLinks», я хочу, чтобы пользователь мог нажать Enter и вызвать «linkadd», buttonкоторый затем запустит функцию JavaScript.
Как я могу это сделать?
Спасибо

Изменить: я нашел этот код, но, похоже, он не работает.

$("#addLinks").keyup(function(event){
    if(event.keyCode == 13){
        $("#linkadd").click();
    }
});
Бен
источник
3
привязать keypressи проверить e.charCode==13(кнопка ввода).
Брэд Кристи
Вы добавили ссылку на библиотеку jquery перед использованием кода выше?
Милинд Анантвар
Да, у меня была ссылка на библиотеку, не знаю, почему она не работает, но теперь все в порядке. Спасибо
Бен
Да, как упомянул @BradChristie keypressили keydownупомянул в этом ответе, - это путь.
metakermit 09

Ответы:

117
$(document).ready(function(){
    $('#TextBoxId').keypress(function(e){
      if(e.keyCode==13)
      $('#linkadd').click();
    });
});
Человек-программист
источник
5
добавление «return false» после события щелчка также полезно, чтобы избежать нажатия по умолчанию на другие кнопки на странице
deebs
Ответ dmitry_romanov лучше, потому что это чистый html.
McKay
6
@McKay, нет, это не так. Кнопки можно использовать не только для форм. Фактически, вопрос ОП явно не в форме.
Дэн
2
@deebs совершенно верно, не знаю, что я делал в тот день, но, должно быть, у меня был мозг пердит.
Тим на MastersAllen
5
ВНИМАНИЕ! В настоящее время он устарел .
Константин Ван
78

Это …… 2020 год. И я верю, что это все еще верно.


НЕ ИСПОЛЬЗУЙ keypress

  1. keypressсобытие не срабатывает , когда пользователь нажимает клавишу , которая не производит каких - либо символов , таких как Tab, Caps Lock, Delete, Backspace, Escape, слева и справаShift , функциональные клавиши ( F1- F12).

    keypress мероприятие Mozilla Developer Network

    keypressСобытие вызывается , когда клавиша нажата , и что ключ нормально производит значение символа . inputВместо этого используйте .

  2. Он устарел.

    keypressevent UI Events (рабочий проект W3C опубликован 8 ноября 2018 г.)

    • ПРИМЕЧАНИЕ | keypressСобытие традиционно ассоциируется с обнаружения значения символа , а не физический ключом , и не может быть доступны на все ключи в некоторых конфигурациях.
    • ВНИМАНИЕ | Тип keypressсобытия определен в этой спецификации для справки и полноты, но эта спецификация не рекомендует использование этого типа события. beforeinputВместо этого в контексте редактирования авторы могут подписаться на событие.

НЕ ИСПОЛЬЗУЙ KeyboardEvent.keyCode

  1. Он устарел.

    KeyboardEvent.keyCode Сеть разработчиков Mozilla

    Устарело | Эта функция больше не рекомендуется. Хотя некоторые браузеры все еще могут поддерживать его, возможно, он уже был удален из соответствующих веб-стандартов, может быть удален или может быть сохранен только в целях совместимости. Избегайте его использования и по возможности обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любой момент.


Что мне тогда использовать? (Хорошая практика)

// Make sure this code gets executed after the DOM is loaded.
document.querySelector("#addLinks").addEventListener("keyup", event => {
    if(event.key !== "Enter") return; // Use `.key` instead.
    document.querySelector("#linkadd").click(); // Things you want to do.
    event.preventDefault(); // No need to `return false;`.
});
Константин Ван
источник
как насчет if (event.key == "Enter") { document.querySelector("#linkadd").click(); } :?
Anupam
2
Обратите внимание, что .keyне во всех браузерах поддерживается: caniuse.com/#feat=keyboardevent-key - около 10% людей используют браузеры, которые его не поддерживают.
Martin Tournoij
73

Есть решение без js.

Установите type=submitкнопку, которую вы хотите использовать по умолчанию, и type=buttonдругие кнопки. Теперь в форме ниже вы можете нажать Enter в любых полях ввода, аRender кнопка будет работать (несмотря на то, что это вторая кнопка в форме).

Пример:

    <button id='close_renderer_button' class='btn btn-success'
            title='Перейти к редактированию программы'
            type=button>
      <span class='glyphicon glyphicon-edit'> </span> Edit program
    </button>
    <button id='render_button' class='btn btn-primary'
            title='Построить фрактал'
            type=submit
            formaction='javascript:alert("Bingo!");'>
      <span class='glyphicon glyphicon-send'> </span> Render
    </button>

Протестировано в FF24 и Chrome 35 ( formactionэто функция html5, но typeэто не так).

dmitry_romanov
источник
17
работает только в том случае, если вы находитесь в форме, OP не использует форму
Эндрю
@ Андрей Да, я это пропустил. Теперь я это ясно вижу, спасибо.
dmitry_romanov
4
@Andrew, правда, но в большинстве случаев это тривиально, чтобы обернуть это в форму ничего не делать ...
Стивен Чанг
2
Кроме того, это решение работает с кнопкой [Go] виртуальной клавиатуры iOS, действие которой по умолчанию - отправить.
Elemental
10
  1. Заменить buttonсsubmit
  2. Будьте прогрессивны , убедитесь, что у вас есть версия на стороне сервера
  3. Привяжите свой JavaScript к submitобработчику формы, а не к clickобработчику кнопки

Нажатие Enter в поле вызовет отправку формы, и обработчик отправки запустится.

Квентин
источник
6

Вы можете добавить обработчик событий к своему вводу следующим образом:

document.getElementById('addLinks').onkeypress=function(e){
    if(e.keyCode==13){
        document.getElementById('linkadd').click();
    }
}
Асад Саидуддин
источник
2

Он работает, когда input type = "button" заменяется на input type = "submit" для кнопки по умолчанию, которую необходимо активировать.

Sud
источник
1

Прежде всего добавьте файл библиотеки jquery jquery и вызовите его в своей html-голове.

а затем используйте код на основе jquery ...

$("#id_of_textbox").keyup(function(event){
    if(event.keyCode == 13){
        $("#id_of_button").click();
    }
});
Милинд Анантвар
источник
1

Это должно сработать, я использую jQuery, вы можете писать простой javascript.
Замени sendMessage()на свой функционал.

$('#addLinks').keypress(function(e) {
    if (e.which == 13) {
        sendMessage();
        e.preventDefault();
    }
});
Аншу
источник
1

Основываясь на некоторых предыдущих ответах, я пришел к следующему:

<form>
  <button id='but' type='submit'>do not click me</button>
  <input type='text' placeholder='press enter'>
</form>

$('#but').click(function(e) {
  alert('button press');
  e.preventDefault();
});

Взгляните на скрипку

РЕДАКТИРОВАТЬ: если вы не хотите добавлять дополнительные элементы html, вы можете сделать это только с помощью JS:

    $("input").keyup(function(event) {
        if (event.keyCode === 13) {
            $("button").click();
        }
    });     
Пабло Верланг
источник
0

Я нашел руководство на w3schools.com, их страница «Попробуйте меня» находится ниже.

https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_trigger_button_enter

Это работало в моем обычном браузере, но не работало в моем приложении php, которое использует встроенный браузер php.

Немного поигравшись, я придумал следующую альтернативу на чистом JavaScript, которая работает в моей ситуации и должна работать в любой другой ситуации:

    function checkForEnterKey(){
        if (event.keyCode === 13) {
            event.preventDefault();
            document.getElementById("myBtn").click();
        }
    }

    function buttonClickEvent()
    {
        alert('The button has been clicked!');
    }

HTML Нажмите клавишу ввода внутри текстового поля, чтобы активировать кнопку.

    <br />
    <input id="myInput" onkeyup="checkForEnterKey(this.value)">
    <br />
    <button id="myBtn" onclick="buttonClickEvent()">Button</button>
Скотт Тови
источник
-1
<input type="text" id="input_id" />    

$('#input_id').keydown(function (event) {
    if (event.keyCode == 13) { 
         // Call your function here or add code here
    }
});
Ришаб Джалани
источник
-2

Я использую кнопку кендо. Это сработало для меня.

<div class="form-group" id="indexform">
    <div class="col-md-8">
            <div class="row">
                <b>Search By Customer Name/ Customer Number:</b>
                @Html.TextBox("txtSearchString", null, new { style = "width:400px" , autofocus = "autofocus" })
                @(Html.Kendo().Button()
                    .Name("btnSearch")
                    .HtmlAttributes(new { type = "button", @class = "k-primary" })
                    .Content("Search")
                    .Events(ev => ev.Click("onClick")))
            </div>
    </div>
</div>
<script>
var validator = $("#indexform").kendoValidator().data("kendoValidator"),
          status = $(".status");
$("#indexform").keyup(function (event) {
    if (event.keyCode == 13) {
        $("#btnSearch").click();
    }
});
</script>
Corvair61
источник