Запускайте нажатие кнопки с помощью JavaScript на клавише Enter в текстовом поле

У меня есть один ввод текста и одна кнопка (см. Ниже). Как я могу использовать JavaScript для вызвать событие нажатия кнопки, когда клавиша Enter нажата внутри текстового поля?

На моей текущей странице уже есть другая кнопка отправки, поэтому я не могу просто сделать ее кнопкой отправки. И я, Только, хочу, чтобы клавиша Enter нажимала эту конкретную кнопку, если она нажата из этого одного текстового поля, и ничего больше.

<input type = "text" id = "txtSearch" />
<input type = "button" id = "btnSearch" value = "Search" onclick = "doSomething();" />

Важное примечание для новичков, таких как я: ключевая часть этого вопроса заключается в том, есть ли у вас уже форма на странице, поэтому у вас уже есть кнопка отправки. Ответ jQuery совместим с кросс-браузером и является хорошим решением.

Joshua Dance 18.08.2014 21:38

@JoshuaDance, уже иметь форму / отправить - не проблема. Страница может иметь множество форм (но не вложенных), каждая из которых имеет собственное представление. Каждое поле каждой формы будет запускать только отправку этой формы. Как заявил этот ответ.

Frédéric 14.01.2016 14:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1 330
2
1 448 084
30
Перейти к ответу Данный вопрос помечен как решенный

Ответы 30

Сделайте кнопку элементом отправки, чтобы она работала автоматически.

<input type = "submit"
       id = "btnSearch"
       value = "Search"
       onclick = "return doSomething();"
/>

Обратите внимание, что для этой работы вам понадобится элемент <form>, содержащий поля ввода (спасибо Сергею Ильинскому).

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

Чуваки! Прочтите весь его вопрос. На странице уже есть другая кнопка отправки, поэтому для него это не сработает.

skybondsor 11.06.2014 20:56

Интересный факт, недавно я попытался сделать это в SharePoint. Однако в SharePoint уже есть форма, охватывающая весь ваш контент, и любые теги <form> выбрасываются либеральным анализатором HTML. Так что мне нужно угнать нажатия клавиш или перебрать. (Кстати, нажатие Enter в SharePoint по какой-то причине запускает режим редактирования. Думаю, на ленте используется та же форма.)

user1499731 03.03.2015 00:21

<button type = "submit" onclick = "return doSomething(this)">Value</button> работает до. Подсказка кроется в ключевом слове return.

Gus 25.04.2017 01:59

@skybondsor - OTOH, как упомянул Гарроу, OP было неверный, когда он заявил об этом ограничении. Вполне возможно иметь несколько форм на одной странице: просто нужно обернуть элемент внутри его собственной формы и убедиться, что это не внутри другая форма на странице.

ToolmakerSteve 28.08.2020 20:42

@ToolmakerSteve Конечно! Но мы оба можем согласиться с тем, что из первоначального вопроса было неясно, возможны ли множественные формы. Еще одна веская причина опубликовать как можно больше кода.

skybondsor 29.08.2020 21:25
Ответ принят как подходящий

В jQuery будет работать следующее:

$("#id_of_textbox").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#id_of_button").click();
    }
});

$("#pw").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#myButton").click();
    }
});

$("#myButton").click(function() {
  alert("Button code executed.");
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id = "username" type = "text"><br>
Password:&nbsp;<input id = "pw" type = "password"><br>
<button id = "myButton">Submit</button>

Или в простом JavaScript, будет работать следующее:

document.getElementById("id_of_textbox")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("id_of_button").click();
    }
});

document.getElementById("pw")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("myButton").click();
    }
});

function buttonCode()
{
  alert("Button code executed.");
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id = "username" type = "text"><br>
Password:&nbsp;<input id = "pw" type = "password"><br>
<button id = "myButton" onclick = "buttonCode()">Submit</button>

Вероятно, лучше запросить event.which, чем event.keyCode или event.charCode, см. developer.mozilla.org/en/DOM/event.charCode#Notes

William Niu 25.03.2011 03:58

@William: Поскольку он использует keyup, а в вашей ссылке указано «charCode никогда не устанавливается в событиях keydown и keyup. В этих случаях вместо него устанавливается keyCode»., это не имеет значения. Тем не менее, я не думаю, что keyup является подходящим событием для работы (keydown, я бы подумал; например, так ведет себя кнопка, когда она находится в фокусе).

T.J. Crowder 02.06.2011 18:34

keydown, а не keyup - лучший вариант для использования. Кроме того, если вы используете asp.net, вам нужно будет установить return false в конце, чтобы asp.net не перехватил событие.

maxp 13.01.2012 14:49

Проблема с использованием keydown заключается в том, что нажатие клавиши Enter будет запускать событие снова и снова. если вы присоединитесь к событию keyup, оно сработает только после отпускания клавиши.

Steve Paulo 13.04.2012 21:29

$(this).click(); выглядит лучше и может работать с селекторами, которые соответствуют более чем одному элементу (например, $('.buttons')).

WhyNotHugo 10.07.2012 22:28

Я использовал $ inputs = $ ('# foo, # bar'); $ inputs.on ('keydown', ...) и $ inputs.off ('keydown') при получении события, чтобы предотвратить автоповтор, и вернуть false, чтобы предотвратить срабатывание неправильной кнопки.

Sam Watkins 17.01.2013 11:04

Я настроил ваш код, добавив event.preventDefault(); перед вызовом функции click();, в то время как моя страница имеет форму, и я переключил keyup на keypress, так как это был единственный рабочий обработчик для меня, в любом случае, спасибо за аккуратный фрагмент кода!

Adrian K. 06.02.2013 05:02

Это работает для ff, chrome, т.е. в приложении asp.net, если вы измените его на keydown и добавите event.preventDefault () перед событием click (). Ненавижу, что приложение asp.net webforms так чувствительно к подобной чуши.

PussInBoots 11.08.2014 13:05

@Hugo Вы не можете использовать $(this), потому что родительский идентификатор - это идентификатор текстового поля, а тот, который вы хотите использовать для click(), - это идентификатор кнопки.

boxspah 15.03.2015 22:19

Почему люди так ненавидят jQuery? Есть ли конкретная причина не поощрять использование jQuery?

sohaiby 08.10.2015 12:47

Честно говоря, когда этот ответ был опубликован, jQuery был в значительной степени синонимом JS. Но теперь многие из нас, кто вообще избегает jQuery (потому что это просто пустая трата килобайт, когда вы используете что-то вроде React), раздражаются, когда мы ищем ответы на вопросы JS, и часто первое, что приходит на ум, - это библиотека, которую мы не используем. Не хочу зависеть от.

Andy 09.10.2015 04:00

Не лучший ответ, особенно сегодня. Так что я спустил это и поднял лучше. Не уверен, почему я потерял репутацию из-за этого.

jweaks 06.12.2015 00:58

@sohaiby: если бы OP использовал jquery, он бы об этом спросил. И если он не использовал jquery, предположив, что это излишне для такой простой задачи. Это то же самое, что спросить, как объединить строки в C++, и получить ответ об использовании Qt QString. Технически верно, но не то, о чем спрашивал.

George Y. 21.12.2015 05:14

Используйте key вместо keyCode. Последний не рекомендуется.

MCCCS 29.01.2019 16:58

@jweaks Голосование за понижение оплачивается представителем, чтобы предотвратить злоупотребления. Вы должны быть уверены, что считаете вопрос или ответ вредным для сайта или пользователей, прежде чем использовать его.

Corrodias 01.03.2019 21:25

как это будет работать для нескольких текстовых полей или полей выбора?

Codenewbie 13.03.2020 10:19

@Codenewbie - вы помещаете идентификатор в каждое поле (каждый элемент). Затем вы копируете код один раз для каждого элемента, изменяя id_of_textbox и id_of_button по желанию.

ToolmakerSteve 28.08.2020 20:36

Выяснил это:

<input type = "text" id = "txtSearch" onkeypress = "return searchKeyPress(event);" />
<input type = "button" id = "btnSearch" Value = "Search" onclick = "doSomething();" />

<script>
function searchKeyPress(e)
{
    // look for window.event in case event isn't passed in
    e = e || window.event;
    if (e.keyCode == 13)
    {
        document.getElementById('btnSearch').click();
        return false;
    }
    return true;
}
</script>

е = е || window.event; // кратчайший способ получить событие

Victor 20.09.2012 17:50

Лучший вариант простого JavaScript. Добавленный JavaScript в качестве атрибута в HTML занимает много места, а jQuery - это просто jQuery (совместимость не гарантируется). Спасибо за решение!

boxspah 15.03.2015 05:35

и если вы вернете false внутри if, вы можете избежать дальнейшей обработки ключа: <input type = "text" id = "txtSearch" onkeypress = "searchKeyPress (event);" /> <input type = "button" id = "btnSearch" Value = "Search" onclick = "doSomething ();" /> <script> function searchKeyPress (e) {// ищем window.event, если событие не передано в e = e || window.event; если (e.keyCode == 13) {document.getElementById ('btnSearch'). click (); вернуть ложь; } вернуть истину; } </script>

Jose Gómez 14.07.2015 00:19

Тогда просто введите код!

<input type = "text"
       id = "txtSearch" 
       onkeydown = "if (event.keyCode == 13)
                        document.getElementById('btnSearch').click()"    
/>

<input type = "button"
       id = "btnSearch"
       value = "Search"
       onclick = "doSomething();"
/>

Да, я почти это сделал. Думаю, это просто личные предпочтения ... Мне нравится более модульный подход. ;)

kdenney 01.10.2008 02:01

если вам нужно остановить отправку формы: onkeydown = "if (event.keyCode == 13) {document.getElementById ('btnSubmit'). click (); event.returnVa‌ lue = false; event.canc‌ el = true ;} "

Gabriel Chung 09.04.2012 15:26

А как насчет кроссбраузерной совместимости? Работает ли он во всех распространенных браузерах? (Я считаю IE6 обычным браузером, так как в нем по-прежнему используется более 5% браузеров во всем мире)

SimonSimCity 17.04.2012 13:04

Это сработало для меня из-за того, что встроенный метод вместо вызова функции с аналогичным кодом в нем позволяет вам возвращать false при вызове и избегать обратной передачи. В моем случае метод «click» вызывает асинхронный вызов __doPostback и без «return false;» просто перезагрузит страницу.

Dave 23.04.2012 19:35

@TimothyChung: Большое спасибо. Остальная часть этой страницы великолепна, но я попал сюда через Google, пытаясь выяснить, как удержать «Enter» в текстовом поле от запуска обратной передачи без с помощью <form> (который, похоже, не работает внутри asp : UpdatePanel). Это работает. (И это можно сделать внутри функции javascript, такой как kdenney, и, возможно, в JQuery.)

RalphChapin 18.09.2012 20:21

Я согласен с Сэмом, этот код с этим встроенным JS-кодом чертовски уродлив. Вы всегда должны разделять коды HTML и JavaScript.

Sk8erPeter 09.05.2013 14:06

Пришлось изменить onkeydown на onkeypress, чтобы он работал в Chrome.

Seanny123 13.09.2013 14:49

@Sam Никогда не получай свой мудрость от марионеток. Боль ведет к страх, а страх убивает разум. Страх - это маленькая смерть, приносящая полное уничтожение. Я столкнусь со своим страхом. Я позволю ему пройти через меня и через меня. И когда он пройдет, я обращу внутренний взор, чтобы увидеть его путь. Где страх прошел там ничего не будет. За исключением, возможно, встроенных обработчиков событий. Итак, да, пожалуйста, отделите обработчики событий от вашего представления / разметки, как этот ответ. ; ^)

ruffin 23.12.2015 20:51

onkeydown = "javascript:if (event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('btnSearch').click();}};"

Это просто кое-что из недавнего проекта ... Я нашел это в сети и понятия не имею, есть ли лучший способ в простом старом JavaScript.

Хотя я почти уверен, что до тех пор, пока в форме есть только одно поле и одна кнопка отправки, нажатие Enter должно отправить форму, даже если на странице есть другая форма.

Затем вы можете захватить форму при отправке с помощью js и выполнить любую проверку или обратные вызовы, которые вы хотите.

event.returnValue = false

Используйте его при обработке события или в функции, которую вызывает обработчик событий.

По крайней мере, он работает в Internet Explorer и Opera.

Эта попытка по изменению близка, но ведет себя неправильно по отношению к браузеру в прошлом (в Safari 4.0.5 и Firefox 3.6.3), поэтому в конечном итоге я бы не рекомендовал ее.

<input type = "text" id = "txtSearch" onchange = "doSomething();" />
<input type = "button" id = "btnSearch" value = "Search" onclick = "doSomething();" />

Следует также упомянуть, что он срабатывает при расфокусировке.

FluorescentGreen5 15.05.2017 14:04

В простом JavaScript

if (document.layers) {
  document.captureEvents(Event.KEYDOWN);
}

document.onkeydown = function (evt) {
  var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode;
  if (keyCode == 13) {
    // For Enter.
    // Your function here.
  }
  if (keyCode == 27) {
    // For Escape.
    // Your function here.
  } else {
    return true;
  }
};

Я заметил, что ответ дается только в jQuery, поэтому я подумал также дать что-то на простом JavaScript.

document.layers? Вы все еще поддерживаете Netscape? !!

Victor 20.09.2012 17:52

Нет, вам не нужно поддерживать Netscape. blog.netscape.com/2007/12/28/…

kingdango 26.06.2013 00:02

netscape.com больше не существует (он перенаправляет на aol.com), но все же есть люди, поддерживающие nescape, удивительно.

LeartS 15.04.2014 23:04

evt.which ? evt.which : evt.keyCode невероятно похож на evt.which || evt.keyCode

user 17.05.2014 10:55

@LeartS Могу поспорить, это потому, что все еще есть люди с использованием Netscape.

SantiBailors 30.11.2015 18:16

Я не понимаю, почему вы проверяете наличие функции layers, чтобы активировать захват Event.KEYDOWN. Какое отношение эти вещи имеют друг к другу? Вместо этого проверьте if (Event.KEYDOWN)!

Mr Lister 23.01.2020 15:07

Это также может помочь, небольшая функция JavaScript, которая отлично работает:

<script type = "text/javascript">
function blank(a) { if (a.value == a.defaultValue) a.value = ""; }

function unblank(a) { if (a.value == "") a.value = a.defaultValue; }
</script> 
<input type = "text" value = "email goes here" onfocus = "blank(this)" onblur = "unblank(this)" />

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

Вопрос заключался в том, чтобы вызвать нажатие кнопки с помощью клавиши ввода в текстовом поле. Ваше решение предназначено для функциональности типа «водяной знак».

kdenney 14.09.2011 17:23

Чтобы запускать поиск каждый раз при нажатии клавиши ввода, используйте это:

$(document).keypress(function(event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        $('#btnSearch').click();
    }
}

Для jQuery mobile мне пришлось сделать:

$('#id_of_textbox').live("keyup", function(event) {
    if (event.keyCode == '13'){
    $('#id_of_button').click();
    }
});

.live устарел в jQuery 1.7. Считается ли это нормальным в jQuery Mobile?

Barmar 30.10.2012 23:58

Это решение для всех любителей Юй:

Y.on('keydown', function() {
  if (event.keyCode == 13){
    Y.one("#id_of_button").simulate("click");
  }
}, '#id_of_textbox');

В этом частном случае у меня были лучшие результаты, используя YUI для запуска объектов DOM, которые были введены с функциональностью кнопок - но это уже другая история ...

Для этого можно использовать один базовый прием, о котором я еще не упоминал. Если вы хотите выполнить действие ajax или другую работу с Enter, но не хотите отправлять форму, вы можете сделать это:

<form onsubmit = "Search();" action = "javascript:void(0);">
    <input type = "text" id = "searchCriteria" placeholder = "Search Criteria"/>
    <input type = "button" onclick = "Search();" value = "Search" id = "searchBtn"/>
</form>

Установка action = "javascript: void (0);" как будто это ярлык для предотвращения поведения по умолчанию. В этом случае метод вызывается независимо от того, нажимаете ли вы клавишу ввода или нажимаете кнопку, и выполняется вызов ajax для загрузки некоторых данных.

Это лучшее решение для поддержки мобильных устройств. Он автоматически скрывает клавиатуру на устройствах Android, а также iOS, если вы добавляете searchCriteria.blur(); к onsubmit.

Aaron Gillion 05.05.2015 01:52

Это не сработает, поскольку на странице уже есть другая кнопка отправки.

Jose Gómez 14.07.2015 00:29

@ JoseGómez, на странице может быть столько кнопок отправки, сколько желает разработчик, и они будут запускаться только соответствующими полями. Достаточно иметь отдельные формы для каждой группы полей / отправки. Страница не ограничивается одной формой.

Frédéric 14.01.2016 14:15

@Frederic: из вопроса я (неправильно?) Понял, что другая кнопка отправки была в той же форме: «На моей текущей странице уже есть другая кнопка отправки, поэтому я не могу просто сделать ее кнопкой отправки».

Jose Gómez 14.01.2016 14:37

@ JoseGómez, вопрос не требует хранить все в единой форме. Многие разработчики игнорируют, что они могут разместить множество форм на одной странице. То, как ОП написал причину своей проблемы, предполагает, что он может быть в этом случае. Например, многие разработчики веб-форм .Net считают, что html ограничен одной формой на странице, поскольку веб-форма .Net ограничена таким образом. Но это действительно не ограничение HTML.

Frédéric 14.01.2016 18:18

Это отличный ответ, поскольку он позволяет настраивать действия, но при этом избегает необходимости в кучке причудливого кода переопределения.

Beejor 19.08.2016 11:46

Поскольку addEventListener еще никто не использовал, вот моя версия. Учитывая элементы:

<input type = "text" id = "txt" />
<input type = "button" id = "go" />

Я бы использовал следующее:

var go = document.getElementById("go");
var txt = document.getElementById("txt");

txt.addEventListener("keypress", function(event) {
    event.preventDefault();
    if (event.keyCode == 13)
        go.click();
});

Это позволяет вам изменять тип события и действие отдельно, сохраняя при этом чистый HTML.

Note that it's probably worthwhile to make sure this is outside of a <form> because when I enclosed these elements in them pressing Enter submitted the form and reloaded the page. Took me a few blinks to discover.

Addendum: Thanks to a comment by @ruffin, I've added the missing event handler and a preventDefault to allow this code to (presumably) work inside a form as well. (I will get around to testing this, at which point I will remove the bracketed content.)

Я действительно не понимаю, почему ответ JQuery получил больше голосов. Я плачу за сообщество веб-разработчиков.

David 22.12.2014 01:25

Все, что вам действительно не хватает, - это аргумент в обработчике нажатия клавиш и e.preventDefault(), чтобы заставить его работать с формами. См. мой (новый) ответ.

ruffin 23.12.2015 21:52

если вы не собираетесь, чтобы ваши пользователи фактически вводили какие-либо данные, вам действительно следует сделать что-то вроде if (event.keyCode == 13) { event.preventDefault(); go.click();}

unsynchronized 22.06.2016 15:47

Использование jQuery только для этой крошечной штуки совершенно бесполезно. Он также легко работает с CSP и требует меньше времени для загрузки. Если можете, используйте это.

Avamander 17.04.2017 15:23

document.onkeypress = function (e) {
 e = e || window.event;
 var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
 if (charCode == 13) {

        // Do something here
        printResult();
    }
};

Вот мои два цента. Я работаю над приложением для Windows 8 и хочу, чтобы кнопка регистрировала событие щелчка, когда я нажимаю кнопку Enter. Я делаю это на JS. Я попробовал несколько предложений, но возникли проблемы. Это прекрасно работает.

Какое-то излишество размещения обработчика событий в документе. Если у вас где-то еще был charCode из 13, вы стреляете из printResult().

ruffin 23.12.2015 21:44

Попробуй это:

<input type = "text" id = "txtSearch"/>
<input type = "button" id = "btnSearch" Value = "Search"/>

<script>             
   window.onload = function() {
     document.getElementById('txtSearch').onkeypress = function searchKeyPress(event) {
        if (event.keyCode == 13) {
            document.getElementById('btnSearch').click();
        }
    };

    document.getElementById('btnSearch').onclick =doSomething;
}
</script>

В этом случае вы также хотите отключить кнопку ввода для отправки на сервер и выполнить сценарий Js.

<input type = "text" id = "txtSearch" onkeydown = "if (event.keyCode == 13)
 {document.getElementById('btnSearch').click(); return false;}"/>
<input type = "button" id = "btnSearch" value = "Search" onclick = "doSomething();" />

Чтобы сделать это с помощью jQuery:

$("#txtSearch").on("keyup", function (event) {
    if (event.keyCode==13) {
        $("#btnSearch").get(0).click();
    }
});

Чтобы сделать это с помощью обычного JavaScript:

document.getElementById("txtSearch").addEventListener("keyup", function (event) {
    if (event.keyCode==13) { 
        document.getElementById("#btnSearch").click();
    }
});

В Угловой2:

(keyup.enter) = "doSomething()"

Если вам не нужна визуальная обратная связь на кнопке, рекомендуется не ссылаться на кнопку, а напрямую вызывать контроллер.

Кроме того, идентификатор не нужен - еще один способ разделения представления и модели в NG2.

Вот вопрос о дополнительной информации о параметрах клавиатуры: stackoverflow.com/q/32155887/435605

AlikElzin-kilaka 22.08.2015 15:04

Чтобы добавить полностью простое решение JavaScript, адресованное Проблема @ icedwater с отправкой формы, вот полное решение с form.

NOTE: This is for "modern browsers", including IE9+. The IE8 version isn't much more complicated, and can be learned here.


Рабочий пример: https://jsfiddle.net/rufwork/gm6h25th/1/

HTML

<body>
    <form>
        <input type = "text" id = "txt" />
        <input type = "button" id = "go" value = "Click Me!" />
        <div id = "outige"></div>
    </form>
</body>

JavaScript

// The document.addEventListener replicates $(document).ready() for
// modern browsers (including IE9+), and is slightly more robust than `onload`.
// More here: https://stackoverflow.com/a/21814964/1028230
document.addEventListener("DOMContentLoaded", function() {
    var go = document.getElementById("go"),
        txt = document.getElementById("txt"),
        outige = document.getElementById("outige");

    // Note that jQuery handles "empty" selections "for free".
    // Since we're plain JavaScripting it, we need to make sure this DOM exists first.
    if (txt && go)    {
        txt.addEventListener("keypress", function (e) {
            if (event.keyCode === 13)   {
                go.click();
                e.preventDefault(); // <<< Most important missing piece from icedwater
            }
        });

        go.addEventListener("click", function () {
            if (outige) {
                outige.innerHTML += "Clicked!<br />";
            }
        });
    }
});

Никто не заметил "ключ доступа" html-атрибута, который доступен с некоторого времени.

Это не javascript способ сочетания клавиш.

accesskey_browsers

Ярлыки атрибутов accesskey на MDN

Предназначен для использования вот так. Достаточно самого атрибута html, однако мы можем изменить заполнитель или другой индикатор в зависимости от браузера и ОС. Сценарий представляет собой непроверенный метод, позволяющий дать представление. Вы можете использовать детектор библиотеки браузера, такой как крошечный топливозаправщик

let client = navigator.userAgent.toLowerCase(),
    isLinux = client.indexOf("linux") > -1,
    isWin = client.indexOf("windows") > -1,
    isMac = client.indexOf("apple") > -1,
    isFirefox = client.indexOf("firefox") > -1,
    isWebkit = client.indexOf("webkit") > -1,
    isOpera = client.indexOf("opera") > -1,
    input = document.getElementById('guestInput');

if (isFirefox) {
   input.setAttribute("placeholder", "ALT+SHIFT+Z");
} else if (isWin) {
   input.setAttribute("placeholder", "ALT+Z");
} else if (isMac) {
  input.setAttribute("placeholder", "CTRL+ALT+Z");
} else if (isOpera) {
  input.setAttribute("placeholder", "SHIFT+ESCAPE->Z");
} else {'Point me to operate...'}
<input type = "text" id = "guestInput" accesskey = "z" placeholder = "Acces shortcut:"></input>

Кажется, не отвечает на вопрос OP о частном случае key = ENTER

Ozan Bellik 24.10.2017 00:47

Этот ответ неправильно понимает ключ доступа, который является способом иметь клавишу фокус на элементе - после нажатия клавиши доступа к текстовой области можно было начать вводить в нее. OP просит совсем другое: способ отправить содержимое текущего элемента.

ToolmakerSteve 28.08.2020 20:30

Для тех, кому нравится лаконичность и современный js-подход.

input.addEventListener('keydown', (e) => {if (e.keyCode == 13) doSomething()});

где Вход - переменная, содержащая ваш элемент ввода.

Используйте keypress и event.key === "Enter" с современным JS!

const textbox = document.getElementById("txtSearch");
textbox.addEventListener("keypress", function onEvent(event) {
    if (event.key === "Enter") {
        document.getElementById("btnSearch").click();
    }
});

Документы Mozilla

Поддерживаемые браузеры

В jQuery вы можете использовать event.which==13. Если у вас есть form, вы можете использовать $('#formid').submit() (с правильными прослушивателями событий, добавленными к отправке указанной формы).

$('#textfield').keyup(function(event){
   if (event.which==13){
       $('#submit').click();
   }
});
$('#submit').click(function(e){
   if ($('#textfield').val().trim().length){
      alert("Submitted!");
   } else {
    alert("Field can not be empty!");
   }
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for = "textfield">
Enter Text:</label>
<input id = "textfield" type = "text">
<button id = "submit">
Submit
</button>

В современном, устаревшем (без keyCode или onkeydown) Javascript:

<input onkeypress = "if (event.key == 'Enter') {console.info('Test')}">

На мой взгляд, это самый простой ответ, который работает. В моем случае использования я обновил его до onkeypress = "inputKeyPressed (event)", а затем обработал параметр event.which в самой функции. Например, клавиша Enter возвращает событие, которое равно 13.

ak93 01.02.2019 14:47

Я разработал собственный javascript для достижения этой функции, просто добавив класс

Пример: <button type = "button" class = "ctrl-p">Custom Print</button>

Вот Проверьте это Скрипка
- или -
проверить работающий пример https://stackoverflow.com/a/58010042/6631280

Note: on current logic, you need to press Ctrl + Enter

Для современного JS keyCode устарел, используйте вместо него key.

searchInput.onkeyup = function (e) {
    if (e.key === 'Enter') {
        searchBtn.click();
    }
}

Коротко работающий чистый JS

txtSearch.onkeydown= e => (e.key= = "Enter") ? btnSearch.click() : 1

txtSearch.onkeydown= e => (e.key= = "Enter") ? btnSearch.click() : 1

function doSomething() {
  console.info('?');
}
<input type = "text" id = "txtSearch" />
<input type = "button" id = "btnSearch" value = "Search" onclick = "doSomething();" />

В этот день мероприятие change - это путь!

document.getElementById("txtSearch").addEventListener('change',
    () => document.getElementById("btnSearch").click()
);

События изменения срабатывают, когда пользователь фиксирует изменение значения в элементе управления формы. Это можно сделать, например, щелкнув за пределами элемента управления или с помощью клавиши Tab для переключения на другой элемент управления. MDN Я думаю, что многие люди не стал бы хотят такого поведения ...

Mattwmaster58 05.01.2021 05:43

Другие вопросы по теме