На этот вопрос требовался более актуальный ответ с источниками. Вот что на самом деле работает (хотя вы не должны верить мне на слово):
// Storing this jQuery object outside of the event callback
// prevents jQuery from having to search the DOM for it again
// every time an event is fired.
var $myButton = $("#buttonID")
// input :: for all modern browsers [1]
// selectionchange :: for IE9 [2]
// propertychange :: for <IE9 [3]
$('#textareaID').on('input selectionchange propertychange', function() {
// This is the correct way to enable/disabled a button in jQuery [4]
$myButton.prop('disabled', this.value.length === 0)
}
1: https://developer.mozilla.org/en-US/docs/Web/Events/input#Browser_compatibility
2: oninput в IE9 не срабатывает, когда мы нажимаем BACKSPACE / DEL / do CUT
3: https: // msdn .microsoft.com / en-us / library / ms536956 (v = vs.85) .aspx
4: http://api.jquery.com/prop/#prop-propertyName-function
НО, для более глобального решения, которое вы можете использовать в своем проекте , я рекомендую использовать плагин textchange jQuery, чтобы получить новое, совместимое с браузером textchange
событие. Он был разработан тем же человеком, который реализовал аналогичное onChange
событие для ReactJS Facebook, которое они используют почти для всего своего сайта. И я думаю, можно с уверенностью сказать, что если это достаточно надежное решение для Facebook, оно, вероятно, достаточно надежно для вас. :-)
ОБНОВЛЕНИЕ: если вам понадобятся такие функции, как поддержка перетаскивания в Internet Explorer, вы можете вместо этого попробовать pandell
недавно обновленную ветвьjquery-splendid-textchange
.