jquery:将函数附加到尚未加载的元素

时间:2012-04-27 00:07:01

标签: jquery event-handling

我将一个函数附加到某个表的每个元素:

$(document).ready(function()
{
    $('#table_id thead th').each(function()
    {
       $(this).disableTextSelect(); // disableTextSelect() is user defined function extending jquery
    });
}

如果表已经加载,这可以正常工作。 为了将它附加到表中,如果将来加载它我必须使用.on()。但我不知道如何: - (

$(document).on('which event?!', '#table_id thead th', function()
{
    $(this).disableTextSelect();
}); 

非常感谢, 幻影

4 个答案:

答案 0 :(得分:2)

我假设您要绑定事件以单击?

$(document).on('click', '#table_id thead th', function() {
    $(this).disableTextSelect();
}); 

为了将来参考,jQuery文档包含所有jQuery事件的列表,可以找到here

答案 1 :(得分:1)

我遇到了同样的问题,我使用.delegate("","load"),但delegate无法将未来元素与事件load,unload,change,blur,focus绑定,因为这些事件不能bubble,而delegate {1}}基于它的实现 最后我用click绑定事件并完成了。
如果您真的需要绑定load事件,我认为您可以使用setInterval代替:

var itv = setInterval(function(){
    var el = $("#table_id");
    if(el.length > 0){
        el.find('thead th').each(function(){
            $(this).disableTextSelect();
        });
        clearInterval(itv);
    }
},100);

这对你有帮助。 :)

答案 2 :(得分:0)

如果表格是页面的一部分,则应在就绪事件发生时准备就绪。

如果您通过AJAX加载表,那么您应该使用从.ajax()(或.load()等)返回的对象,并将您的逻辑传递给.success()方法对象

理论上讲,有一个加载事件,但它不可靠。从理论上讲,你可以附加任何AJAX请求的成功,然后你的功能在完成时会自行分离,但这可能有点讨厌。

答案 3 :(得分:0)

我知道一些有用的东西,但我不确定它有多可行。在功能中包装你想要的东西。

function somename() {
  $('#table_id thead th').each(function()
    {
       $(this).disableTextSelect(); // disableTextSelect() is user defined function extending jquery
    });
}

调用somename()一次为当前加载的元素激活它,并在每次加载适合选择器的新元素时调用它。我知道这会起作用,但我不知道它是否有效使用它。