2

我正在调查 jQuery 函数trigger()。我得到了定义,但我不明白为什么要使用它。就像给定的

$('#foo').on('click', function() {
    alert($(this).text());
});
$('#foo').trigger('click');

一旦页面被加载,并且当单击 ID 为“foo”的按钮时,这将返回弹出窗口。

但这也可以通过 click() 或添加

$('#foo').on('click', function() {
    alert($(this).text());
});

我不明白为什么以及何时应该使用它以及它是如何工作的?

我从其他资源中读到过这个,但这里的答案更令人满意。

提前致谢

4

3 回答 3

2

.trigger()实际上更快,它会减少一个功能。

在内部,该.click()方法实际上最终使用.trigger()

jQuery.fn.click = function (data, fn) {
    if (fn == null) {
        fn = data;
        data = null;
    }

     return arguments.length > 0 ? this.on("click", null, data, fn) : this.trigger("click");
}
于 2013-05-16T10:24:07.697 回答
2

使用此代码

$('#foo').on('click', function() {
    alert($(this).text());
});

只会为单击添加一个侦听器,并且每当您单击该项目时,只会出现此警报,而不是自动出现,

但是如果它基于某些条件匹配您的要求,您想显示警报并且用户实际上没有点击该项目,那么您可以从您的 js 触发它

使用这个

$('#foo').trigger('click');

现在谈论.click()的只是调用上面的函数,所以它会为你节省一个函数调用绑定和返回......

所以它在技术上比触发要慢但是,这个调用和返回分钟延迟对你的项目很重要

于 2013-05-16T10:24:36.680 回答
0

从上面的评论:

“为什么.trigger('click'),为什么不只是.click()?”

确实,以下两行具有相同的效果:

$('#foo').trigger('click');
$('#foo').click();

后者显然更容易键入,但正如已经指出的那样,它最终会.trigger('click')在幕后调用,因此在运行时效率较低 - 尽管在许多情况下差异根本不重要。

但是,它的另一个优点.trigger()是它允许您将附加信息传递给事件处理程序,这是您无法通过调用.click(). 例如:

$('#foo').trigger('click', ['extra', 'info']);

然后可以通过事件处理程序中的参数获得这些额外信息:

$('#foo').on('click', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});

(请注意,此示例与您在问题中获得代码的jQuery doco中的示例几乎相同。您是否阅读了所有该文档页面?)

于 2013-05-16T11:32:54.320 回答