Событие изменения текстового поля jQuery

Не имеет ли элемент ввода текста события изменения? Когда я прикрепляю обработчик события изменения к текстовому вводу, он не запускается. Keyup уволен, но keyup недостаточно для обнаружения изменения, так как есть, очевидно, другие способы ввода текста во вход.

Ответ 1

Нет реального решения этого - даже в ссылках на другие вопросы, приведенные выше. В конце концов я решил использовать setTimeout и вызывать метод, который проверяет каждую секунду! Не идеальное решение, но решение, которое работает и код, который я вызываю, достаточно просто, чтобы не влиять на производительность, вызывая все время.

function InitPageControls() {
        CheckIfChanged();
    }

    function CheckIfChanged() {
        // do logic

        setTimeout(function () {
            CheckIfChanged();
        }, 1000);
    }

Надеюсь, что это поможет кому-то в будущем, поскольку кажется, что нет верного способа добиться этого с помощью обработчиков событий...

Ответ 2

Спецификация HTML4 для элемента <input> указывает, что доступны следующие события script:

onfocus, onblur, onselect, onchange, onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, OnKeyUp

вот пример, который связывается со всеми этими событиями и показывает, что происходит http://jsfiddle.net/pxfunc/zJ7Lf/

Я думаю, что вы можете отфильтровать, какие события действительно релевантны вашей ситуации и определить, какое текстовое значение было до и после события, чтобы определить изменение

Ответ 3

Я обнаружил, что это работает:

$(document).ready(function(){
    $('textarea').bind('input propertychange', function() {
        //do your update here
    }

})

Ответ 4

Событие изменения запускается только после того, как вход теряет фокус (и был изменен).

Ответ 5

Вы можете достичь этого:

 $(document).ready(function(){              
     $('#textBox').keyup(function () {alert('changed');});
 });

или с изменением (скопировать дескриптор копирования правой кнопкой мыши):

 $(document).ready(function(){              
     $('#textBox2').change(function () {alert('changed');});
 });

Вот Демо

Ответ 6

$('#input').on("input",function () {alert('changed');});

работает для меня.