非表单元素的jQuery更改事件
我正在寻找某种类型的非表单元素的jQuery更改事件,jquery,events,Jquery,Events,我正在寻找某种类型的change事件,但不包括非表单元素 问题: 我有一个表,其中tr标记通过另一个脚本进行动态更改Tr元素正在从display:block更改为display:none,反之亦然 我需要这样的东西: // Add an event listener for change events $(document).bind("modified", function() { alert("Someone modified " + this); }); // Modify a
change
事件,但不包括非表单元素
问题:我有一个
表
,其中tr
标记通过另一个脚本进行动态更改Tr
元素正在从display:block
更改为display:none
,反之亦然
我需要这样的东西:
// 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");
事件将列出我的
表中任何tr
的更改(显示none
或block
无关紧要)在任何更改之后,脚本将检查是否所有tr
都设置为display:none
,如果为true,则执行操作。作为一种解决方法,您可以使用计时器定期检查某些内容是否已更改,或者是否所有tr
元素都设置为display:none
作为一种解决方法,您可以使用计时器,用于定期检查某些内容是否已更改,或者是否将所有tr
元素设置为display:none
一种可能性是设置一个计时器来执行此操作。例如:
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)来取消它代码>一种可能是设置一个计时器来执行此操作。例如:
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)来取消它代码>这样的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毫秒检查一次您的表。这样的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毫秒检查一次您的表。我将创建隐藏和显示tr元素的函数,并在其中实现事件触发,比如调用tr_was_hidden()或tr_was_show()函数。这样,您可以在所有显示/隐藏事件触发时处理它们
$.fn.showTR = function() {
return $(this).each(function() {
$(this).show();
tr_was_shown();
});
};
$.fn.hideTR = function() {
return $(this).each(function() {
$(this).hide();
tr_was_hidden();
});
};
我将创建隐藏和显示tr元素的函数,并在其中实现事件触发,比如调用tr_was_hidden()或tr_was_show()函数。这样,您可以在所有显示/隐藏事件触发时处理它们
$.fn.showTR = function() {
return $(this).each(function() {
$(this).show();
tr_was_shown();
});
};
$.fn.hideTR = function() {
return $(this).each(function() {
$(this).hide();
tr_was_hidden();
});
};