【问题标题】:SmartyStreets jQuery.liveaddress plugin, how to unbind eventsSmartyStreets jQuery.liveaddress 插件,如何取消绑定事件
【发布时间】:2016-05-05 01:14:51
【问题描述】:

我在一个有角度的单页应用程序中使用 smarty street jquery.liveaddress 插件。当我转换到下一页时,我需要从 liveaddress 实例中解除所有事件侦听器的绑定。现在,如果我回到页面,所有事件都会触发两次,然后在下一次在页面上触发 3 次。

我已经尝试了我能想到的一切。我的最后一个解决方案是从 $(document) 中取消绑定所有事件名称,因为它看起来像是插件将所有事件附加到的位置。但即使这样也没有用。

jQuery(document).unbind("AddressChanged");
        jQuery(document).unbind("AutocompleteUsed");
        jQuery(document).unbind("VerificationInvoked");
        jQuery(document).unbind("RequestSubmitted");
        jQuery(document).unbind("ResponseReceived");
        jQuery(document).unbind("RequestTimedOut");
        jQuery(document).unbind("AddressWasValid");
        jQuery(document).unbind("AddressWasAmbiguous");
        jQuery(document).unbind("AddressWasInvalid");
        jQuery(document).unbind("AddressWasMissingSecondary");
        jQuery(document).unbind("OriginalInputSelected");
        jQuery(document).unbind("UsedSuggestedAddress");
        jQuery(document).unbind("InvalidAddressRejected");
        jQuery(document).unbind("AddressAccepted");
        jQuery(document).unbind("Completed");

【问题讨论】:

  • 我注意到在这个取消绑定调用列表中,您错过了“AutocompleteInvoked”和“AutocompleteReceived”。调用 unbind 确实会分离事件。

标签: javascript jquery jquery-plugins smartystreets


【解决方案1】:

任何尝试在 Angular 应用程序中实现 SmartyStreets jquery.liveaddress 插件的人都可以。

诀窍是不注册匿名事件处理程序。

在我的例子中,我在指令中实例化 SmartyStreets,因此将所有事件处理程序放在作用域上并在 $destroy 上调用 liveAddress.deactivate()。不再有重复的事件。

【讨论】:

    【解决方案2】:

    在 jQuery 中,事件处理函数存储在一个数组中。因此,unbind() 函数只查找上述数组中的函数。这进一步意味着您只能使用 unbind() 已经添加了 bind() 的事件处理程序。

    查看 .bind() 上的 jQuery 文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多