代码之家  ›  专栏  ›  技术社区  ›  Ali Habibzadeh

绑定事件的方法太多了

  •  1
  • Ali Habibzadeh  · 技术社区  · 14 年前

    有多种方法可以将事件绑定到jquery中的元素

    。单击、.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 回复  |  直到 14 年前
        1
  •  5
  •   Nick Craver    14 年前

    我不同意设置会更简单,因为你很少将超过1或2个事件绑定到对象上,至少在总体方案中是这样的……认为它确实发生了。

    .event(func) 是一条捷径,相当于 .bind('event', func) 所以不管你的喜好是什么都很重要。但是如果您想绑定 相同的 多个事件的处理程序, .bind('event1 event2 event3', func) 要短得多。

    .delegate(selector, event, func) 只是 .live('event', func) 有了上下文,当然这些行为会冒泡,所以它们还有另一个用途…不一定是“高级的”,只是取决于目的。

    这一切都取决于你想做什么,哪一个更好。将4000个元素与 .bind() 效率比 .live() .delegate() 曾经。反过来也一样, .bind() 在单个元素上(不通过ajax等替换)比 LIVER() 听一个将泡泡20次的事件。如果您正在循环使用json和绑定 n 项,这应该是一个问题,因为分配这些事件处理程序需要花费时间。

        2
  •  1
  •   D.C.    14 年前

    我想一个因素是像.click()这样的处理程序的易用性。jquery的ajax函数也是如此。虽然ajax()是低级的,而且非常可定制,但是如果您有基本的需求,则可以更快地设置load()。

    经常使用.click()和.change()可以在不指定大量参数的情况下快速向元素添加处理程序。在这种情况下,默认值对我有效。

        3
  •  1
  •   ChaosPandion    14 年前

    把不同的方式看作是句法上的甜点。拿 one 例如。是否每次都要将此添加到代码中?

    $("#id").bind("click", function() {
        $(this).unbind("click");
        // ...
    });