jQuery-“;触发点击“;vs“;函数调用”;
jQuery - "Trigger a click" vs "Function call"?
假设我有一些操作绑定到了一个链接(使用.click或.live),稍后我想做同样的事情,但我不想要重复的代码。哪种方式是正确的,为什么?
此:
$('#link').click(function(){
//do stuff
});
//called later
$('#link').trigger('click');
或:
$('#link').click(function(){
do_stuff();
});
//called later
do_stuff();
//defined here
function do_stuff(){
//do stuff
}
实际上,您只需要区分是否在事件处理程序中访问event object
。另一个区别是,被调用的处理程序的上下文可能会更改,因此this
在直接调用时不会指向被调用的node
。
如果您正在访问this
或event object
,那么您确实应该使用.trigger
来执行处理程序。您也可以通过手动调用该方法自己传递所有必要的数据,但为什么要发明轮子呢。
否则,您可以从任何您可以访问的地方直接调用该函数。
请注意,根据这两个操作,代码中的上下文会有所不同。
在您的匿名回调函数中,this
将引用正在单击的链接。在do_stuff
中不会。
除此之外,我认为调用一个做你想做的事情的函数在语义上通常比模拟一个会触发监听器的点击更具吸引力。不过这是我个人的喜好。
第一个方法的一个问题是,您还将触发绑定到该控件的任何其他单击事件;你可以用名称空间来解决这个问题
$('#link').bind('click.mynamespace', function(){ ... });
$('#link').trigger('click.mynamespace');
或者通过使用第二事件
$('#link').bind('do_stuff', function(){ ... });
$('#link').click(function() { $(this).trigger('do_stuff'); });
然而,我会选择第二个,因为它更简单,前提是你可以在需要调用它的地方对函数进行闭包访问
function do_stuff(event) { ... }
$('#link').click(do_stuff);
do_stuff();
如果在您不再有权访问的闭包中定义函数是有用的,请使用第一种方法。
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- jQuery-“;触发点击“;vs“;函数调用”;
- 方法调用模式vs函数调用模式
- Javascript回调函数vs只是调用函数
- Node.js-emit vs函数调用