非表单元素的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();
    });
};