如何使用jQuery live()在添加其他行后将多个事件绑定到所有表行?

时间:2010-01-07 15:30:05

标签: jquery

我正在尝试使用live()方法将三个事件绑定到一个选择器,但我似乎无法使其正常工作。

这是我到目前为止所做的工作,直到我添加其他表行:

$("tr:has(td)").live('click',function(event){
      //do stuff
}).live('mouseover',function(){
    $(this).toggleClass('highlight');
}).live('mouseout',function(){
    $(this).toggleClass('highlight');
});

添加其他表行后,只有click事件才有效。如何在添加表格行后让所有三个事件都起作用?

3 个答案:

答案 0 :(得分:4)

在您的示例中,您要通过live()在不是您想要的对象的内容上添加live().live().live()。这是jQuery处理链接的方式。

您需要做的是:

var $o = $("tr:has(td)");
$o.live('click',function(event){
      //do stuff
});
$o.live('mouseover',function(){
    $(this).toggleClass('highlight');
});
$o.live('mouseout',function(){
    $(this).toggleClass('highlight');
});

Here is an article on chaining

答案 1 :(得分:0)

我认为你必须做$("tr:has(td)").live()三次 - 你不能把它链起来。

答案 2 :(得分:0)

您可以使用事件委派,而不是使用live(),这更加优雅:

$('table').hover(function(e) {
    $(e.target).closest('tr').addClass('highlight');
}, function(e) {
    $(e.target).closest('tr').removeClass('highlight');
})