Ваши события изменения не вызываются, потому что событие onChange, то есть событие, с которым метод jQuery change()
связывает данный обратный вызов, действительно только для элементов <input>
, <select>
и <textarea>
( ссылка ).
В частности, ваш первый пример - вызов change()
на номер, который должен выдать ошибку. Ваш последний пример вызывает change()
для элемента tbody
, который не поддерживает событие onChange
.
Что касается получения чего-то, что действительно работает, вы можете использовать setInterval()
для явной проверки количества строк очень часто:
setInterval(function(){
if($("#myTable tr").length > 2){
/* do stuff */
}
}, 1000);
Это позволит проверить, что число строк больше 2 каждую секунду.
Если возможно, я бы не стал использовать этот подход и вместо этого попытался бы выполнить те же действия, которые вы выполняли бы для мифического события «при изменении строки», в тот момент, когда вы фактически делаете вызовы AJAX. Во всяком случае, вы можете создать пользовательское событие jQuery , которое будет запускаться на элементе <table>
после каждого вызова AJAX (например, $("#myTable tr").trigger('my-custom-event')
,), который вы затем сможете прослушивать: $("#myTable tr").bind('my-custom-event', function(){ /* do stuff */ })
Если у вас нет контроля или доступа к JavaScript, который запускает вызовы AJAX, которые обновляют ваши строки, другим решением может быть рассмотрение события jQuery ajaxSuccess()
, который запускается всякий раз, когда запрос AJAX успешно выполняется на вашей странице. Например:
$('body').ajaxSuccess(function(){
if($("#myTable tr").length > 2){
/* do stuff */
}
});