【问题标题】:Make event fire first... alternative to using $._data in jQuery首先触发事件...替代在 jQuery 中使用 $.data
【发布时间】:2015-08-04 12:01:11
【问题描述】:

我想创建一个“确认插件”,它会首先触发并询问用户是否“他们确定”。为了清楚起见,我将使用定制的确认框,而不是默认的 Window confirm() 方法。

如果是,那么它将触发已绑定到它的所有其他事件。如果没有,那么它什么也不做。

一个用例是一个删除按钮,它绑定了一个单独的点击事件,当按下它时将删除一个元素。

如果我将我的插件附加到按钮上,那么它将绑定另一个点击事件,并且通过使用 $._data 中的事件信息,我可以将我的偶数发送到列表的顶部(使其首先触发),然后我停止传播(这会停止另一个删除元素的绑定触发)。如果用户在我的确认框上单击确定,这次我再次触发单击只是绕过停止内容,然后它将触发原始事件

我使用的是https://github.com/private-face/jquery.bind-first的略微修改版本

它可以访问元素上的此信息的唯一方法是使用:

$._data($(this)[0]).events  

我想知道这是多么“面向未来”,因为我知道自 1.7 以来这已经发生了变化。有没有计划正式支持类似的事情。

如果一切都失败了,我知道我可以确保插件和绑定首先发生在代码中,但这并不是最灵活的解决方案。

使用 $._data 是一个臭名昭著的解决方案,因此这篇文章。也许我可以做一些花哨的自定义事件?

【问题讨论】:

  • 应始终避免使用未记录的功能。
  • 前导下划线向我暗示答案可能是“根本没有”。
  • 另外,这听起来像是一个 XY 问题。您需要首先调用的事件是什么,为什么需要这样做?
  • 附带说明,您可以根据您的用例,在支持捕获阶段的浏览器上将事件捕获到文档级别:jsfiddle.net/resLgpek
  • 为什么不在确认弹出窗口中添加一个回调参数,该参数仅在用户单击“确定”时触发?

标签: javascript jquery core


【解决方案1】:

简短的回答是根本没有。使用,或更重要的是依赖未记录的功能绝不是一个好主意。

听起来你在这里有一个XY Problem。可能有许多其他方法可以实现您在这里尝试做的事情,并且使用$._data 几乎可以肯定不是最好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多