绑定事件的方法很多

时间:2010-04-18 16:50:20

标签: jquery

有多种方法可以将事件绑定到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() {
                ///...
            })
        });

3 个答案:

答案 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");
    // ...
});