首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery -“触发点击”vs“函数调用”?

jQuery -“触发点击”vs“函数调用”?
EN

Stack Overflow用户
提问于 2012-07-17 16:58:11
回答 3查看 6K关注 0票数 2

假设我有一些操作绑定到一个链接(使用.click或.live),我想稍后做同样的事情,但我不想要重复的代码。哪种方法是正确的,为什么?

这一点:

代码语言:javascript
复制
$('#link').click(function(){
 //do stuff
});

//called later
$('#link').trigger('click');

或者:

代码语言:javascript
复制
$('#link').click(function(){
  do_stuff();
});

//called later
do_stuff();

//defined here
function do_stuff(){
   //do stuff
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-17 17:01:47

实际上,您只需要区分您是否正在访问事件处理程序中的event object。另一个不同之处在于,被调用的处理程序的上下文可能会发生变化,因此在直接调用时,this不会指向被调用的node

如果您正在访问thisevent object,则确实应该使用.trigger来执行处理程序。您也可以通过手动调用该方法来自己传递所有必需的数据,但为什么要发明轮子呢?

否则,您可以从任何有权访问的地方直接调用该函数。

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 17:01:54

请注意,根据这两个操作,代码中的上下文会有所不同。

在您的匿名回调函数中,this将引用被单击的链接。在do_stuff中则不会。

除此之外,我认为调用一个做你想做的事情的函数在语义上通常比模拟一个有触发监听器的副作用的点击更有吸引力。不过,这是我个人的喜好。

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 17:03:09

第一个方法的一个问题是,您还将触发绑定到该控件的任何其他单击事件;您可以使用名称空间来解决这个问题

代码语言:javascript
复制
$('#link').bind('click.mynamespace', function(){ ... });

$('#link').trigger('click.mynamespace');

或通过使用第二个事件

代码语言:javascript
复制
$('#link').bind('do_stuff', function(){ ... });
$('#link').click(function() { $(this).trigger('do_stuff'); });

然而,我选择第二种方法,因为它更简单,只要你有需要调用的函数的闭包访问权限。你不需要额外的函数包装器,BTW:

代码语言:javascript
复制
function do_stuff(event) { ... }
$('#link').click(do_stuff);
do_stuff();

如果在您不再有权访问的闭包中定义函数是有用的,请使用第一种方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11519159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档