【问题标题】:unable to understand triggerHandler() method无法理解 triggerHandler() 方法
【发布时间】:2013-06-18 06:36:37
【问题描述】:

我无法获得triggerHandler() 方法的以下几点:

  • 虽然 .trigger() 将对 jQuery 对象匹配的所有元素进行操作,但 .triggerHandler() 只影响第一个匹配的元素。

  • 使用.triggerHandler() 创建的事件不会在 DOM 层次结构中冒泡;如果它们没有被目标元素直接处理,它们什么也不做。

  • .triggerHandler() 返回由它导致执行的最后一个处理程序返回的任何值,而不是返回 jQuery 对象(以允许链接)。如果没有触发任何处理程序,则返回undefined

更多详情见http://api.jquery.com/triggerHandler/

【问题讨论】:

  • 您想知道为什么 triggerHandler 的行为与描述的一样吗?行为似乎很清楚,但它本身。如果不适合你,请在每一点上添加一些你不明白的地方。

标签: jquery


【解决方案1】:

关键是自定义事件的性能大大提高,这些事件通常不需要事件冒泡并且能够 安全地调用任何事件名称,而不会触发本机操作,例如浏览器跟踪链接、重置或提交表单。


对于$(".item").trigger("click");

.triggerHandler 不同,该事件在使用.item- 选择器选择的所有元素上触发。

.triggerHandler不同,事件在所有元素的所有父母、祖父母、祖父母等上触发 使用.item-selector。

.triggerHandler 不同,您可以在.trigger() 之后继续链接,例如你可以做$(".item").trigger("click").addClass("clicked");

对于以下 DOM 树,我用 X 标记了在调用 $(".item").trigger("click"); 时触发 "click"- 事件的位置:

<body X>
    <div class="container" X>
        <ul X>
            <li class="item" X>
            <li class="item" X>
            <li class="item" X>
            <li class="item" X>
        </ul>
    </div>
</body>

$(".item").triggerHandler("click"); 也是如此

<body>
    <div class="container">
        <ul>
            <li class="item" X>
            <li class="item">
            <li class="item">
            <li class="item">
        </ul>
    </div>
</body>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 2015-08-02
    相关资源
    最近更新 更多