【问题标题】:jQuery: delegate to self?jQuery:委托给自己?
【发布时间】:2012-01-21 09:52:52
【问题描述】:

首先,我要说我使用的是旧版本的 jQuery 库(即 1.4.2)。更新到 jQuery 1.7 需要一些时间(尤其是寻找错误),所以我正在寻找适用于 1.4.2 的解决方案。

我想写一个函数:

function _setupGui($domNode, selector){
  $domNode
    .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ }
    .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ }
    .delegate(selector, 'click', function(){ /* do smth awesome */ }
}

并且能够提供一个允许选择“self”的选择器。

是否有一个选择器,您可以将其传递给委托,允许选择持有委托的节点?

在 jQuery 1.7 中,$domNode.on('click', null, function(){/*handler*/}) 就是这样做的,并且是 $domNode.delegate(null, 'click', function(){/*handler*/}) 的实际实现。 但是,在 1.4.2 中,后者什么都不做。

这是与以前版本的语义变化吗?

【问题讨论】:

  • 这与仅向元素添加处理程序而不是委托有什么不同?可能是我误会了。
  • @James:你不是,它只是有一个单一的入口点来绑定事件

标签: jquery jquery-1.4


【解决方案1】:

我认为您真正想要的是将处理程序直接附加到元素上,而根本不使用delegate。你可以自己处理这个。可能是这样的,传递“自我”意味着只附加事件:

function _setupGui($domNode, selector){
    if(selector == "self"){
        $domNode
          .mouseenter(function(){ /* do smth awesome */ })
          .mouseleave(function(){ /* do smth awesome */ })
          .click(function(){ /* do smth awesome */ })
    }else{
        $domNode
          .delegate(selector, 'mouseenter', function(){ /* do smth awesome */ })
          .delegate(selector, 'mouseleave', function(){ /* do smth awesome */ })
          .delegate(selector, 'click', function(){ /* do smth awesome */ })
    }
}

【讨论】:

  • 我想要做的是将处理程序直接附加到元素上,但使用一致的方式不会卡在 bind() vs. live() vs. on() vs. ... 辩论。我认为 on() 是这样做的尝试,但恕我直言,它相当于糖衣,你知道虫子喜欢糖。我选择了 delegate() 因为它是战斗中的弱者,每个人都不管它。我让所有内容都浮现到正文或文档中,因为当你认为它主要发生在人类做某事时,性能影响可以忽略不计,这在计算机时间尺度上并不常见。
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多