将jQuery升级到3.0:将bind()重写为on()& unbind()到off()

时间:2016-07-08 23:11:32

标签: jquery

bind()和unbind()在jQuery 3.0.0中已弃用。 jQuery Upgrade guide说API文档说明了如何使用on()&更新它们。 off(),但我无法找到解释的地方。

我们在应用程序中有很多不赞成使用的方法,但大多数都升级得很好,但有两种情况不明确:

  1. Bind有boolean参数preventBubble参数,在某些情况下我们传递false。如何使用preventBubble=false
  2. 实现相同(on()
  3. 在我们称之为unbind(eventName, functionHandler)的地方,我们很少使用unbind。 off()需要选择器作为第二个参数才能传递functionHandler。如何使用off()
  4. 重写该内容

3 个答案:

答案 0 :(得分:1)

Selector作为第二个参数是可选的,用于设置委派目标。由于这不是您bind()的设置方式,因此不是问题

bind()在内部使用on(),您应该只需将bind重命名为on

答案 1 :(得分:1)

有两种方法可以阻止事件冒泡。

从事件处理程序返回false将自动调用event.stopPropagation()和event.preventDefault()。

或者,更有用的是在事件处理程序中调用event.stopImmediatePropagation()

对于.off(),您只能传递两个参数,第二个参数是处理函数。 JQ将适当地分配并将undefined分配给selector参数。根据您指定on的方式,这可能有效,也可能无效。

您可能还希望查看命名空间事件,因为它可以简化指定要删除的事件的确切内容。例如(来自文档)

// Delegate events under the ".validator" namespace
$( "form" ).on( "click.validator", "button", validate );

// Remove event handlers in the ".validator" namespace
$( "form" ).off( ".validator" );

答案 2 :(得分:0)

我找到了一篇描述此内容的文章,请参阅linkstackoverflow answer

  

$ span_rename_folder
  。儿童()
  。儿童(':image.inplace_cancel')
  .off('单击')
  .on('点击',function(){...});

     

这将删除所选元素中的所有点击事件。