【问题标题】:jQuery Event constructorjQuery 事件构造函数
【发布时间】:2012-08-28 01:03:40
【问题描述】:

我与jquery tools 合作过一段时间,并开始浏览twitter bootstrap src

我注意到的一件事是使用$.Event 构造函数来触发事件。

在许多情况下(例如引导模式),您会发现事件触发如下:

var e = $.Event('show');

this.$element.trigger(e);

我不明白为什么这比直接调用更好:

this.$element.trigger('show');

所以我很想知道使用 jQuery Event 构造函数有什么好处。我在文档中读到您可以将任意属性附加到事件中,这对我来说完全有意义。然而,我不明白的是,如果您根本不向事件添加任何属性,为什么使用构造函数可能是有利的。

有人可以向我解释为什么$.Event 构造函数比使用事件字符串调用触发器更有优势吗?

非常感谢

【问题讨论】:

    标签: javascript jquery events


    【解决方案1】:

    如果您想稍后为事件添加属性,它会更灵活;它可以帮助您了解事件触发后的状态,例如,如果有人打电话给stopPropagation()preventDefault()

    除此之外,jQuery 将简单地获取事件类型 (string),将其包装在 $.Event 对象中并对其进行规范化。这是发生这种情况的jQuery的相关源代码:

    event = typeof event === "object" ?
         // jQuery.Event object
         event[ jQuery.expando ] ? event :
         // Object literal
         jQuery.extend( jQuery.Event(type), event ) :
         // Just the event type (string)
         jQuery.Event(type);
    

    【讨论】:

    • 虽然这里的一切都是正确的,但它没有提到在引导模式插件中使用$.Event。在引导模式中,他定义了事件对象,以便稍后检查isDefaultPrevented
    • 感谢 João 的回答,这让我对 jQuery 如何处理事件有了更深入的了解,@Fauntleroy 在引导程序的上下文中得到了正确的解释。再次感谢!
    【解决方案2】:

    看了下bootstrap源码,相信你一定指的是这个:

    var that = this
        , e = $.Event('show')
    
    this.$element.trigger(e)
    
    if (this.isShown || e.isDefaultPrevented()) return
    

    他正在定义e,以便稍后检查e.isDefaultPrevented() 是否阻止了默认操作。

    【讨论】:

    • 啊……你说得对。我不知道我是怎么错过的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-12-13
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多