jQuery' input ' событие
Я никогда не слышал о событии в jQuery под названием input пока я не увидел это jsfiddle.
вы знаете, почему это работает? Это псевдоним для keyup или что-то?
$(document).on('input', 'input:text', function() {});
8 ответов:
происходит, когда текстовое содержимое элемента изменилось через пользовательский интерфейс.
это не совсем псевдоним
keyup, потому чтоkeyupсработает, даже если клавиша ничего не делает (например: нажатие и затем отпускание клавиши управления вызоветkeyupсобытие).хороший способ думать об этом так: это событие, которое срабатывает всякий раз, когда изменяется вход. Это включает в себя-но не ограничивается-нажатие клавиш, которые изменяют вход (так, например,
Ctrlсамо по себе не вызовет событие, ноCtrl-Vчтобы вставить какой-то текст будет), выбрав опцию автоматического завершения, Linux-стиль среднего щелчка вставить, перетащить и падение, и много других вещей.посмотреть этой страница и комментарии к этому ответу для более подробной информации.
oninputсобытие очень полезно для отслеживания изменений полей ввода.однако он не поддерживается в IE версии onpropertychange что делает то же самое как
oninput.так что вы можете использовать его таким образом:
$(':input').on('input propertychange');чтобы иметь полную поддержку crossbrowser.
так как propertychange может быть вызван для любого изменения свойства, например, отключенное свойство изменяется, то вы хотите сделать включить это:
$(':input').on('propertychange input', function (e) { var valueChanged = false; if (e.type=='propertychange') { valueChanged = e.originalEvent.propertyName=='value'; } else { valueChanged = true; } if (valueChanged) { /* Code goes here */ } });
С помощью jQuery, идентичны по сути:
$('a').click(function(){ doSomething(); }); $('a').on('click', function(){ doSomething(); });С
inputсобытие, однако, только второй шаблон, кажется, работает в браузерах, которые я тестировал.таким образом, вы ожидаете, что это сработает, но это не так (по крайней мере, в настоящее время):
$(':text').input(function(){ doSomething(); });опять же, если вы хотите использовать делегирование событий (например, чтобы настроить событие на
#containerпередinput.textдобавляется в DOM), это должно прийти ум:$('#container').on('input', ':text', function(){ doSomething(); });к сожалению, опять же, это не работает в настоящее время!
работает только этот шаблон:
$(':text').on('input', function(){ doSomething(); });ОТРЕДАКТИРОВАНО С БОЛЕЕ АКТУАЛЬНОЙ ИНФОРМАЦИЕЙ
Я, конечно, могу подтвердить, что этот рисунок:
$('#container').on('input', ':text', function(){ doSomething(); });теперь работает также, во всех "стандартных" браузерах.
Как сказал клаустрофоб, oninput поддерживается для IE9+.
, " событие oninput является багги в Internet Explorer 9. Он не запускается, когда символы удаляются из текстового поля через пользовательский интерфейс только при вставке символов. Хотя событие onpropertychange поддерживается в Internet Explorer 9, но, как и событие oninput, оно также является багги, оно не запускается при удалении.
Так как символы могут быть удалены в нескольких способы (клавиши Backspace и Delete, CTRL + X, команда Cut и Delete в контекстном меню), нет хорошего решения для обнаружения всех изменений. Если символы удаляются с помощью команды удалить контекстного меню, изменение не может быть обнаружено в JavaScript в Internet Explorer 9."
У меня есть хорошие результаты привязки к вводу и keyup (и keydown, если вы хотите, чтобы он срабатывал в IE, удерживая клавишу Backspace).
будьте осторожны при использовании ввода. Это событие срабатывает при фокусировке и размытии в IE 11. Но он запускается при изменении в других браузерах.
https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus
Я думаю, что "input" просто работает здесь так же, как и "oninput" в модели событий уровня O DOM.
кстати:
Так же, как silkfire прокомментировал это, я тоже погуглил для "jQuery input event". Таким образом, я был приведен сюда и поражен, узнав, что "вход" является приемлемым параметром для jquery bind (). В jQuery в действии (стр. 102, 2008 изд.) "вход" не упоминается как возможное событие (против 20 других, от "размытия" до "разгрузка"). Верно, что на стр. 92 можно было бы предположить обратное из перечитывания (т. е. из ссылки на различные строковые идентификаторы между моделями уровня 0 и уровня 2). Это очень вводит в заблуждение.
jQuery имеет следующую подпись для
.on()способ:.on( events [, selector ] [, data ], handler )события могут быть любыми из перечисленных в этой ссылке:
https://developer.mozilla.org/en-US/docs/Web/Events
хотя, они не все поддерживаются каждым браузером.
Mozilla заявляет следующее о входном событии:
событие ввода DOM запускается синхронно, когда значение или элемент измененный. Кроме того, он срабатывает contenteditable Редакторы при изменении его содержимого.
Comments