У меня была похожая проблема, и привязка к дюжине различных событий просто не разрешила ее, поскольку существует так много разных способов изменения входного значения, как отмечал bobince .
Итак, я закончил тем, что написал простой простой плагин для мониторинга jQuery, который по своей природе универсален.
С его помощью вы можете отслеживать изменения входного значения, изменения текста texta, изменения содержимого div и т. Д .:
https://github.com/nixd3v/monitor
Отслеживание изменений содержимого div:
$.monitor('add', function(){return $("div#someDiv").html()}, function(){
console.log('Div content changed');
});
Отслеживание изменений входного значения:
$.monitor('add', function(){return $("#password").val()}, function(){
console.log('input value changed');
});
Конечно, он также использует цикл, но не через setInterval , а скорее через использование setTimeout вместе с самовыполняющейся анонимной функцией:
(function(){
// do some stuff
setTimeout(arguments.callee, 100);
})();
Что это делает - это гарантирует, что следующий вызов не будет выполнен до того, как ваш код был выполнен. Если вы используете опрос в своем коде - это правильный способ сделать это.