HTML: прослушивать * все * изменения ввода, а не только изменения с клавиатуры? - PullRequest
3 голосов
/ 02 ноября 2011

Например, если у меня есть такой ввод:

<input id="myInput" type="text" />

Как я могу получить уведомление, когда значение изменяется программно (например, в результате $("#myInput").val("new value"))?

Пример: http://jsfiddle.net/2ax9y/

Редактировать : обратите внимание, вопрос состоит в том, как прослушивать изменения , а не как вручную отправлять изменения. Я прекрасно понимаю, что могу вручную отправлять события изменений, но я стараюсь этого избежать.

Ответы [ 4 ]

2 голосов
/ 02 ноября 2011

Вы можете изменить прототип $, чтобы он всегда вызывал события change() всякий раз, когда вызывается val(value):

$.prototype.changeval = $.prototype.val;
$.prototype.val = function(v) {
    if (v) {
        $(this).changeval(v);
        $(this).change();
    } else {
        return $(this).changeval();
    }
}
1 голос
/ 02 ноября 2011

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

Создайте функцию проверки и зафиксируйте ее с желаемой детализацией времени - 100 мс - хорошее начало, подстраивайтесь под ваши нужды.

Гипотетическая непроверенная реализация:

var last_value = null;

function handle_changed() {
    // Do something here
}

function check_value() {
    var v = $("#myelement").val();
    if(v !== last_value) {
        last_value = v;
        handle_changed();
    }
}

setInterval(check_value, 100);
1 голос
/ 02 ноября 2011

Запустить изменение: http://jsfiddle.net/maniator/2ax9y/1/


Немного по-другому: http://jsfiddle.net/maniator/2ax9y/2/

0 голосов
/ 02 ноября 2011

Я не думаю, что это присущая способность события изменения. Вы можете вручную инициировать событие изменения, когда вы программно изменяете значение.

$("#myInput").val(+(new Date())).change();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...