jQuery On函数用于未来元素?

时间:2011-12-08 12:36:08

标签: jquery

$("#dataTable tbody").on("click", "tr", function(event){
    alert($(this).text());
});

这个语法是针对已经在页面上的tr吗?

如果没有,未来tr元素的语法是什么?

5 个答案:

答案 0 :(得分:47)

对于#dataTable tbody内的未来元素,您的代码应该有效。要将点击一直委托给文档,在页面的任何位置允许将来<tr>使用相同的处理程序,请尝试:

$(document).on("click", "tr", function(event){
    alert($(this).text());
});

答案 1 :(得分:3)

添加到Davids接受的答案,您还可以使用此解决方案将多个事件绑定到选择器以及所有未来的匹配元素。

例如输入元素。

$(document).on({
    focus:function(){
        alert($(this).val());
    },
    blur: function(){
        alert($(this).val());
    }
}, 'input[type=text]');

答案 2 :(得分:1)

这将处理所有<tr>,无论它们何时创建,但仅限于当前存在的#dataTable tbody。 它相当于.delegate

答案 3 :(得分:0)

你必须使用jQuery'S .live()作为未来元素

错了,因为这是jQuery 1.7(我在发布我的答案时会很快)。

.on()适用于所有(未来)元素。

答案 4 :(得分:0)

来自api.jquery.com/on/

  

.on()方法将事件处理程序附加到当前选定的集合   jQuery对象中的元素。从jQuery 1.7开始,使用.on()方法   提供附加事件处理程序所需的所有功能。对于   帮助转换旧的jQuery事件方法,请参阅.bind(),   .delegate()和.live()。要删除与.on()绑定的事件,请参阅   .off()。附加仅运行一次然后删除的事件   本身,见.one()

api.jquery.com/live/

  

从jQuery 1.7开始,不推荐使用.live()方法。使用.on()来   附加事件处理程序。旧版jQuery的用户应该使用   .delegate()优先于.live()。