событие изменения текстового поля jQuery не срабатывает, пока текстовое поле не потеряет фокус?
я обнаружил, что событие изменения jQuery в текстовом поле не срабатывает, пока я не нажму вне текстового поля.
HTML:
<input type="text" id="textbox" />
JS:
$("#textbox").change(function() {alert("Change detected!");});
посмотреть демо на JSFiddle
мое приложение требует, чтобы событие запускалось при каждом изменении символа в текстовом поле. Я даже попытался использовать keyup вместо этого...
$("#textbox").keyup(function() {alert("Keyup detected!");});
...но это известный факт, что событие keyup не запускается при щелчке правой кнопкой мыши и вставке.
любой обходной путь? Наличие обоих слушателей вызовет какие-либо проблемы?
7 ответов:
привязка к обоим событиям является типичным способом сделать это. Вы также можете привязать к событию вставки.
вы можете привязать к нескольким событиям, как это:
$("#textbox").on('change keyup paste', function() { console.log('I am pretty sure the text box changed'); });если вы хотите быть педантичным об этом, вы также должны привязать к mouseup для удовлетворения перетаскивания текста вокруг, и добавить
lastValueпеременная, чтобы убедиться, что текст действительно изменился:var lastValue = ''; $("#textbox").on('change keyup paste mouseup', function() { if ($(this).val() != lastValue) { lastValue = $(this).val(); console.log('The text box really changed this time'); } });и если вы хотите быть
super duperпедантичный, то вы должны использовать таймер интервала для удовлетворения автоматического заполнения, плагинов и т. д.:var lastValue = ''; setInterval(function() { if ($("#textbox").val() != lastValue) { lastValue = $("#textbox").val(); console.log('I am definitely sure the text box realy realy changed this time'); } }, 500);
на современных браузерах, вы можете использовать the
inputсобытие:$("#textbox").on('input',function() {alert("Change detected!");});
if you write anything in your textbox, the event gets fired. code as follows :HTML:
<input type="text" id="textbox" />JS:
<script type="text/javascript"> $(function () { $("#textbox").bind('input', function() { alert("letter entered"); }); }); </script>
$(this).bind('input propertychange', function() { //your code here });это работает для ввода, вставить, Правой Кнопкой Мыши вставить и т. д.
попробуйте это:
$("#textbox").bind('paste',function() {alert("Change detected!");});посмотреть демо на JSFiddle.
попробуйте следующий код:
$("#textbox").on('change keypress paste', function() { console.log("Handler for .keypress() called."); });
чтение ваших комментариев привело меня к грязному исправлению. Это не правильный путь, я знаю, но можно обойти.
$(function() { $( "#inputFieldId" ).autocomplete({ source: function( event, ui ) { alert("do your functions here"); return false; } }); });
Comments