3

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

所以我很好奇的是$.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 时看起来并不那么好,但你永远不知道(对我不起作用)。还是有一个我可能不知道的与两者结合的功能相似的功能?

4

7 回答 7

9

.delegate并已.bindjQuery 1.7 版取代on.()

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

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

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

于 2012-12-05T21:30:55.480 回答
1

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

$('div').delegate('.someclass', 'click mouseover mouseout', function(e){ .... });
于 2014-01-14T07:30:58.083 回答
0

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

$('div').on({
    'click': function(e){ .... },
    'mouseover': function(e){ .... },
    'mouseout': function(e){ .... }
}, '.someclass');
于 2012-12-05T21:36:15.263 回答
0

如果您刚刚开始使用新的事件管理函数:on() 和 off(),这可能是最好的。它们使您能够使用精简语法同时使用委托事件和标准事件,例如:

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

$("div").on({
    click: function() {},
    keydown: function() {}
}, "a.cls");  // delegated
于 2012-12-05T21:42:58.117 回答
0

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

于 2012-12-05T21:43:23.273 回答
0

可能delegate 比bind 更稳定的原因是delegate 与live() 具有相同的结果。这意味着delegate() 还将事件绑定到动态生成的元素。

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

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

于 2012-12-05T21:52:36.517 回答
-1

需要注意的是,delegate 和 live 具有与 bind 和 on 不同的功能。delegate 和 live 都将事件绑定到任何当前和未来的元素。on 方法仅将自身附加到当时选择的元素。

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

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

克里斯...我可以建议研究一下backbonejs或其他一些MVC系统,它们会为你做这种事情,并在完成后清理大部分混乱。

http://backbonejs.org/

于 2012-12-05T21:36:11.680 回答