我正在寻找某种change
事件,但是对于非表单元素。
问题:
我有table
其中tr
个标签由另一个脚本动态更改。 Tr
个元素正在从display:block
更改为display:none
,反之亦然。
我需要这样的事情:
事件将列出我tr
中任意table
的更改(无论是显示none
还是block
),并且在任何更改后,脚本都会检查是否所有{ {1}}设置为tr
,如果为true,则执行某些操作。
答案 0 :(得分:6)
DOM更改不会触发事件。您可以选择更新修改DOM的代码以发送自定义事件,或轮询更改。第一个选项最简单,可以看起来像这样:
// Add an event listener for change events
$(document).bind("modified", function() {
alert("Someone modified " + this);
});
// Modify a table and trigger an event for it
$("#yourTable").css("display", "block").trigger("modified");
轮询选项会较慢,不建议使用。最小的例子:
setInterval(function() {
var $table = $("#yourTable");
if ($table.css("display")!="block") {
alert("The table changed!");
}
}, 500);
这将每500毫秒检查一次你的表。
答案 1 :(得分:1)
一种可能性是设置计时器来执行此操作。例如:
jQuery(function($) {
var table = $("selector_for_your_table");
var timerHandle = setInterval(function() {
if (table.find("tr:visible").length == 0) {
// No rows in the table are visible, do something
}
}, 500);
});
每半秒检查一次,这可能太频繁了。这取决于桌子的大小等。只要你可以避免不必要的工作,你也会想要关闭关闭。您可以致电cancelInterval(timerHandle);
取消它。
答案 2 :(得分:1)
我会创建隐藏和显示tr元素的函数,并在其中实现一个事件触发,比如调用tr_was_hidden()或tr_was_shown()函数。这样,您可以在触发时处理所有显示/隐藏事件。
$.fn.showTR = function() {
return $(this).each(function() {
$(this).show();
tr_was_shown();
});
};
$.fn.hideTR = function() {
return $(this).each(function() {
$(this).hide();
tr_was_hidden();
});
};
答案 3 :(得分:0)
作为一种解决方法,您可以使用计时器检查某些内容是否已更改或是否所有tr
元素都设置为display:none
。