所以我试图找到答案,但似乎没有确定的答案可以帮助我做出正确的选择。
所以我最感兴趣的是$.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读取,但你永远不知道(对我不起作用)。或者是否有一个函数我在本质上类似于我可能不知道的两者的组合?
答案 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系统,并在完成后清理大部分混乱。