为什么使用JQuery的trigger("remove")与不使用trigger()的remove()效果相同?

4

看起来以下代码:

$("#logo-events").trigger("remove");

与“

”相同的功能。

$("#logo-events").remove();

这是预期的行为吗?你可以在打开控制台的jQuery网站上尝试一下。

你为什么会期望有所不同?或者更好的是,你期望什么以及为什么?触发器:执行与给定事件类型匹配的所有处理程序和行为,以匹配元素。删除是实际事件。 - scrappedcola
触发器文档中提到:“对于除window之外的普通对象和DOM对象,如果触发的事件名称与对象上的属性名称匹配,jQuery将尝试将该属性作为方法调用,如果没有事件处理程序调用event.preventDefault()。”但是remove是一种方法而不是属性。 - j08691
3个回答

5

根据 .trigger() 方法的文档:

对于普通对象和除 window 以外的 DOM 对象,如果触发的事件名称与对象上的属性名称匹配,且没有事件处理程序调用 event.preventDefault(),jQuery 将 尝试将该属性作为方法调用。如果不希望出现这种行为,请改用 .triggerHandler()。

.remove() 是 DOM 的本地函数:

调用 remove() 方法时,必须执行以下步骤:
- 如果上下文对象的父级为 null,则终止这些步骤。
- 从上下文对象的父级中移除上下文对象。

将这两个内容结合起来,就可以得到观察到的行为。 当触发 "remove" 时,jQuery 调用节点的本地 .remove() 方法,然后删除元素。

jQuery/event.js中相关的部分:

if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
    // ...
    elem[ type ]();    // elem["remove"]();
    // ...
}

-1

.trigger() 是一种在加载时触发动作的方法,而 .remove() 则是可以放置在触发的动作中(无论是自动还是手动)。如果您正在使用 .trigger('remove'),那么在第一次就没有必要拥有该元素。


-1

触发器函数

我包含了触发器函数供您参考,但是是的,那是预期的行为。 触发器允许您手动(或自动)执行事件,比如在您的情况下删除。这通常用于支持“on()”函数。例如:

( "#logo-events" ).on( "click", function() { alert( $( this ).text() ); }); $( "#logo-events" ).trigger( "click" );

此代码块手动触发点击函数,但它没有说的是,如果您只对没有事件但有函数的元素运行触发器,则会执行该函数。

例如:

$("logo-events").trigger("remove");

以下代码将直接运行。

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接