При использовании jquery .change
наinput
событие будет только тогда, когда ввод теряет фокус
В моем случае мне нужно позвонить в службу (проверить, является ли значение допустимым), как только изменилось входное значение. Как я мог сделать это?
При использовании jquery .change
наinput
событие будет только тогда, когда ввод теряет фокус
В моем случае мне нужно позвонить в службу (проверить, является ли значение допустимым), как только изменилось входное значение. Как я мог сделать это?
Ответы:
ОБНОВЛЕНО для пояснения и примера
примеры: http://jsfiddle.net/pxfunc/5kpeJ/
Способ 1. input
Событие
В современных браузерах используют input
событие. Это событие будет срабатывать, когда пользователь вводит текстовое поле, вставляя, отменяя, в основном, каждый раз, когда значение изменяется от одного значения к другому.
В jQuery сделай так
$('#someInput').bind('input', function() {
$(this).val() // get the current value of the input field.
});
начиная с jQuery 1.7, заменить bind
на on
:
$('#someInput').on('input', function() {
$(this).val() // get the current value of the input field.
});
Способ 2. keyup
событие
Для более старых браузеров используйте это keyup
событие (оно будет срабатывать после отпускания клавиши на клавиатуре, это событие может давать своего рода ложное срабатывание, поскольку при отпускании «w» значение ввода изменяется и keyup
событие срабатывает, но также и когда Клавиша «Shift» отпускается, когда происходит keyup
событие, но не было внесено никаких изменений во ввод.). Также этот метод не срабатывает, если пользователь щелкает правой кнопкой мыши и вставляет из контекстного меню:
$('#someInput').keyup(function() {
$(this).val() // get the current value of the input field.
});
Способ 3. Таймер ( setInterval
или setTimeout
)
Чтобы обойти ограничения, keyup
вы можете установить таймер, чтобы периодически проверять значение входа, чтобы определить изменение значения. Вы можете использовать setInterval
или setTimeout
сделать эту проверку таймера. Посмотрите помеченный ответ на этот вопрос SO: событие изменения текстового поля jQuery или посмотрите на скрипку рабочий пример, используя focus
и blur
события для запуска и остановки таймера для определенного поля ввода
innerText
or value
(имитирующее пользовательский ввод) вызовет событие MutationObserver jsfiddle.net/pxfunc/ 04chgpws / 1 (см. Console.log для ведения журнала событий MutationObserver). У вас есть другой тестовый пример, на который я могу посмотреть?
Если у вас есть HTML5:
oninput
(срабатывает только тогда, когда изменение действительно происходит, но делает это немедленно)В противном случае вам нужно проверить все эти события, которые могут указывать на изменение значения элемента input:
onchange
onkeyup
( нет keydown
или keypress
как значение ввода не будет иметь нового нажатия клавиши еще)onpaste
(когда поддерживается)и возможно:
onmouseup
(Я не уверен в этом)С HTML5 и без использования jQuery вы можете использовать input
событие :
var input = document.querySelector('input');
input.addEventListener('input', function()
{
console.log('input changed to: ', input.value);
});
Это будет срабатывать каждый раз, когда изменяется текст ввода.
Поддерживается в IE9 + и других браузерах.
Попробуйте это вживую в jsFiddle здесь .
Как уже предлагали другие, решение в вашем случае заключается в обнаружении нескольких событий .
Плагины, выполняющие эту работу, часто прослушивают следующие события:
$ input . on ( 'изменить keydown keypress keyup mousedown click mouseup' , обработчик );
Если вы думаете , что может поместиться, вы можете добавить focus
, blur
и другие события тоже.
Я предлагаю не превышать в событиях прослушивание, так как он загружает в память браузера дальнейшие процедуры, выполняемые в соответствии с поведением пользователя.
Внимание: обратите внимание, что изменение значения элемента ввода с помощью JavaScript (например, с помощью .val()
метода jQuery ) не вызовет ни одно из указанных выше событий.
(Ссылка: https://api.jquery.com/change/ ).
.val()
например, для события изменения в поле ввода, вы должны сделать что-то вроде этого ... $('#element').val(whatever).change()
Если вы хотите, чтобы событие запускалось при изменении чего-либо внутри элемента, вы можете использовать событие keyup .
onchange
, либо отслеживать состояние самостоятельно. keydown
не работает, потому что срабатывает до изменения состояния входа.
// .blur срабатывает, когда элемент теряет фокус
$('#target').blur(function() {
alert($(this).val());
});
// Для запуска вручную используйте:
$('#target').blur();
Существуют события jQuery, такие как keyup и keypress, которые вы можете использовать с входными HTML-элементами. Вы можете дополнительно использовать событие blur () .
keypress
события, потому что нажатая клавиша еще не изменила это значение.