非表单元素的jQuery更改事件

时间:2011-02-04 10:22:57

标签: jquery events

我正在寻找某种change事件,但是对于非表单元素。

问题:
我有table其中tr个标签由另一个脚本动态更改。 Tr个元素正在从display:block更改为display:none,反之亦然。

我需要这样的事情:

事件将列出我tr中任意table的更改(无论是显示none还是block),并且在任何更改后,脚本都会检查是否所有{ {1}}设置为tr,如果为true,则执行某些操作。

4 个答案:

答案 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