При использовании 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события для запуска и остановки таймера для определенного поля ввода
innerTextor 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события, потому что нажатая клавиша еще не изменила это значение.