Есть ли какое-либо событие в Jquery, которое срабатывает только в том случае, если пользователь нажимает кнопку ввода в текстовом поле? Или любой плагин, который можно добавить, чтобы включить это? Если нет, как бы написать быстрый плагин, который бы сделал это?
Событие JQuery для ввода пользователя в текстовое поле?
Ответ 1
Вы можете подключить свое собственное событие
$('textarea').bind("enterKey",function(e){
//do stuff here
});
$('textarea').keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterKey");
}
});
Ответ 2
$('#textbox').on('keypress', function (e) {
if(e.which === 13){
//Disable textbox to prevent multiple submit
$(this).attr("disabled", "disabled");
//Do Stuff, submit, etc..
//Enable the textbox again if needed.
$(this).removeAttr("disabled");
}
});
Ответ 3
Вот вам плагин: (Fiddle: http://jsfiddle.net/maniator/CjrJ7/)
$.fn.pressEnter = function(fn) {
return this.each(function() {
$(this).bind('enterPress', fn);
$(this).keyup(function(e){
if(e.keyCode == 13)
{
$(this).trigger("enterPress");
}
})
});
};
//use it:
$('textarea').pressEnter(function(){alert('here')})
Ответ 4
heres плагин jquery для этого
(function($) {
$.fn.onEnter = function(func) {
this.bind('keypress', function(e) {
if (e.keyCode == 13) func.apply(this, [e]);
});
return this;
};
})(jQuery);
чтобы использовать его, введите код и настройте его следующим образом:
$( function () {
console.log($("input"));
$("input").onEnter( function() {
$(this).val("Enter key pressed");
});
});
Ответ 5
Должно быть хорошо отмечено, что использование live()
в jQuery было устарело с версии 1.7
и было удалено в jQuery 1.9
. Вместо этого рекомендуется использовать on()
.
Я бы предложил следующую методологию связывания, поскольку она решает следующие потенциальные проблемы:
- Связывая событие с
document.body
и передавая $selector в качестве второго аргументаon()
, элементы могут быть присоединены, отсоединены, добавлены или удалены из DOM без необходимости иметь дело с событиями повторной привязки или двойного связывания, Это связано с тем, что событие привязано непосредственно кdocument.body
, а не к$selector
, что означает, что$selector
можно добавить, удалить и добавить снова и никогда не будет загружать связанное с ним событие. - Вызывая
off()
доon()
, этот script может жить либо внутри основного тела страницы, либо внутри тела вызова AJAX, не беспокоясь о случайных событиях с двойной привязкой. - Обернув script в
$(function() {...})
, этот script может быть снова загружен либо основным телом страницы, либо внутри тела вызова AJAX.$(document).ready()
не запускается для запросов AJAX, а$(function() {...})
делает.
Вот пример:
<!DOCTYPE html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
var $selector = $('textarea');
// Prevent double-binding
// (only a potential issue if script is loaded through AJAX)
$(document.body).off('keyup', $selector);
// Bind to keyup events on the $selector.
$(document.body).on('keyup', $selector, function(event) {
if(event.keyCode == 13) { // 13 = Enter Key
alert('enter key pressed.');
}
});
});
</script>
</head>
<body>
</body>
</html>
Ответ 6
Код HTML: -
<input type="text" name="txt1" id="txt1" onkeypress="return AddKeyPress(event);" />
<input type="button" id="btnclick">
Java Script Код
function AddKeyPress(e) {
// look for window.event in case event isn't passed in
e = e || window.event;
if (e.keyCode == 13) {
document.getElementById('btnEmail').click();
return false;
}
return true;
}
У вашей формы нет кнопки отправки по умолчанию
Ответ 7
Если вы вводите search
, вы также можете использовать событие on 'search'
. пример
<input type="search" placeholder="Search" id="searchTextBox">
,
$("#searchPostTextBox").on('search', function () {
alert("search value: "+$(this).val());
});
Ответ 8
Еще одна тонкая вариация. Я пошел на небольшое разделение полномочий, поэтому у меня есть плагин, позволяющий поймать ключ ввода, а затем я просто привязываюсь к событиям:
(function($) { $.fn.catchEnter = function(sel) {
return this.each(function() {
$(this).on('keyup',sel,function(e){
if(e.keyCode == 13)
$(this).trigger("enterkey");
})
});
};
})(jQuery);
И затем в использовании:
$('.input[type="text"]').catchEnter().on('enterkey',function(ev) { });
Этот вариант позволяет использовать делегирование событий (для привязки к тем элементам, которые вы еще не создали).
$('body').catchEnter('.onelineInput').on('enterkey',function(ev) { /*process input */ });
Ответ 9
Я не смог получить событие keypress
для кнопки ввода и почесал голову некоторое время, пока не прочитал документы jQuery:
"Событие нажатия клавиши отправляется элементу, когда браузер регистрирует ввод с клавиатуры. Это похоже на событие нажатия клавиши, за исключением того, что клавиши-модификаторы и непечатаемые клавиши, такие как Shift, Esc, и удаляют события нажатия клавиши запуска, но не события нажатия клавиши". (https://api.jquery.com/keypress/)
Мне пришлось использовать событие keyup
или keydown
, чтобы поймать нажатие кнопки ввода.