jQuery $ .delegate()单选择器多个事件还是$ .bind()更好的解决方案?

时间:2012-12-05 21:26:49

标签: javascript jquery html dom

所以我试图找到答案,但似乎没有确定的答案可以帮助我做出正确的选择。

所以我最感兴趣的是$.delegate(),最近我是使用它的粉丝,现在我的大多数应用程序似乎都比较稳定了一天。就这样。我通常在使用它时会做类似

的事情
$('div').delegate('.someclass', 'click', function(e){ .... });
直到现在,我对此很满意。我有一个元素,我需要处理多个事件。所以我想知道最好的方法是什么?我是否做了一些事情。

$('div').delegate('.someclass', 'click', function(e){ .... });
$('div').delegate('.someclass', 'mouseover', function(e){ .... });
$('div').delegate('.someclass', 'mouseout', function(e){ .... });

还是走$.bind()路线?并做一些类似

的事情
$('.someclass').bind({
    click:function(){...},
    mouseout:function(){...},
    mouseover:function(){...}
});

$.delegate()是否支持与$.bind()类似的内容?它似乎没有通过API读取,但你永远不知道(对我不起作用)。或者是否有一个函数我在本质上类似于我可能不知道的两者的组合?

7 个答案:

答案 0 :(得分:9)

.delegate.bind已被{{1>}取代 jQuery ver 1.7

on.()

$('div').on({
    click:function(){...},
    mouseout:function(){...},
    mouseover:function(){...}
},'.someclass');

当您想要委托事件时,可以使用此方法。

答案 1 :(得分:1)

试试这段代码。我有正确的结果视图。

$('div').delegate('.someclass', 'click mouseover mouseout', function(e){ .... });

答案 2 :(得分:0)

我的猜测是所有这些事件都是彼此不同的?如果是,那么如果你更新到至少jquery 1.7,你可以在方法.on上使用事件映射:

$('div').on({
    'click': function(e){ .... },
    'mouseover': function(e){ .... },
    'mouseout': function(e){ .... }
}, '.someclass');

答案 3 :(得分:0)

如果您刚刚开始使用新的事件管理功能,可能是最好的:on()和off()。它们使您能够使用压缩语法来使用委托事件和标准事件,例如:

$("a").on({
    click: function() {},
    mouseover: {}
});  // ordinary event handlers

$("div").on({
    click: function() {},
    keydown: function() {}
}, "a.cls");  // delegated

答案 4 :(得分:0)

自jQuery ver 1.7起,您建议使用的方法已弃用 使用.on()方法,因为它提供了附加事件处理程序所需的所有功能 要删除与.on()绑定的事件,请使用.off()
或者,如果您想要只调用一次的事件,请使用.one()

答案 5 :(得分:0)

也许委托更稳定的原因然后绑定是因为委托与live()具有相同的结果。这意味着delegate()还会将事件绑定到动态生成的元素。

至于使用on()的建议,我总是喜欢live()和bind()之间的区别,因为它告诉我一些关于事件绑定的本质。

我不知道jQuery如何优化on()函数。 Live()总是比bind()重一点。

答案 6 :(得分:-1)

重要的是要注意,委托和实时具有不同于bind和on的功能。 delegate和live都会将事件绑定到任何当前和未来的元素。 on方法仅将其自身附加到当时正在选择的元素上。

克里斯在他的页面上看到了更好的结果,因为当他的页面用户使用它时,他可能没有正确绑定和解除绑定事件。

他应该单独研究它并切换到.on()整体。

克里斯......我可以建议你看一下为你做这类事情的主干或其他一些MVC系统,并在完成后清理大部分混乱。

http://backbonejs.org/