有多种方法可以将事件绑定到jquery
中的元素.click,.bind,.live,.delegate,在.data等中保存事件数据
这是其中最优秀的方法,为什么?
这样的单一模式不会更有益吗?
$('selector').bind({
event: 'click mouseover ...',
keepAlive: (true, false, ...),
trigfunction: (function() {
// I run for click
}, function() {
// i run for mouseover
}, function() {
///...
})
});
答案 0 :(得分:5)
我不同意设置会更简单,因为你很少将超过1或2个事件绑定到对象,至少在宏观方案中......认为它确实发生了。
.event(func)
是一种捷径,相当于.bind('event', func)
,所以无论你喜欢什么,都有重要意义。但是,如果您想要将相同的处理程序绑定到多个事件,.bind('event1 event2 event3', func)
要短得多。
.delegate(selector, event, func)
只有.live('event', func)
有一个上下文,但当然这些都是冒泡的,所以它们有另一种用途......不一定是“优越”,只取决于目的。
这完全取决于你想要达到的目标,哪个更好。使用.bind()
绑定4,000个元素的效率远低于.live()
或.delegate()
一次。反过来也是如此,单个元素上的.bind()
(不是通过AJAX替换等)比让.live()
监听会冒泡20次的事件要高效得多。如果您正在循环使用JSON并绑定n
项,那么这应该是一个问题,因为花费时间分配这些事件处理程序。
答案 1 :(得分:1)
我想一个因素是像.click()这样的处理程序的易用性。对于jquery的ajax函数也可以这么说。虽然ajax()是低级别的,并且可以非常自定义。如果您有基本需求,则可以更快地设置.load()。
使用.click()和.change()可以快速向元素添加处理程序,而无需指定大量参数。在这些情况下,默认值适用于我。
答案 2 :(得分:1)
将不同的方式想象为语法糖。以one
为例。你真的想每次都把它添加到你的代码中吗?
$("#id").bind("click", function() {
$(this).unbind("click");
// ...
});