如何使用函数作为事件处理程序,以及如何使用参数直接调用函数
How to use a function as event handler and to be directly called, with parameters?
在jQuery脚本中,我有一个函数,它通常会在单击时被调用,因此充当事件处理程序,但我也需要直接调用它。在这两种情况下,它都需要一些参数。
因此,简化后的情况是:
function go(e) {
console.log(e.data.dir)
}
$("body").keydown(function(e) {
if (e.which == 37) { // left
go({dir: 'forward'});
} else if (e.which == 39) { // right
go({dir: 'forward'});
}
});
$('.forward').on('click', {
dir: 'forward'
}, go);
这是一把小提琴
这显然不起作用,因为当我直接调用函数时,没有data
键。一个变通方法是调用这样的函数:
go({data: {dir: 'forward'}});
它很管用,但很难看。在这种情况下,正确的做法是什么?
在这种特殊情况下,您可以使用apply()
解决问题,如果条件是true ,则只需传递事件处理程序的参数
function go(e) {
console.log(e.data.dir)
}
$("body").on('keydown', {dir: 'forward'}, function(e) {
if (e.which === 37 || e.which === 39) {
go.apply(this, arguments);
}
});
$('.forward').on('click', {dir: 'forward'}, go);
FIDDLE
或者您可以传入具有匹配属性的对象
$("body").on('keydown', {dir: 'forward'}, function(e) {
if (e.which === 37 || e.which === 39)
go({data:{dir: 'forward'}});
});
或使用自定义事件触发点击事件
$("body").on('keydown', {dir: 'forward'}, function(e) {
if (e.which === 37 || e.which === 39)
$('.forward').trigger('click', [{data: {dir: 'forward'}}] );
});
有两种方法可以看出这一点。
- 您可以将参数对象存储在脚本顶部的一个变量中,并在需要在单击处理程序之外调用该变量时将其传递给
go()
。这会让事情变得不那么丑陋 - 或者,您可以检查
e
在go()
中是否为null,如果为null,则使用/设置一些通用默认值
任何一种都是可以接受的,这取决于所有方法都要做什么。
我想我会这样做(除非我需要事件):
function go(data) {
console.log(data.dir)
}
$("body").keydown(function(e) {
if (e.which == 37) { // left
go({dir: 'forward'});
} else if (e.which == 39) { // right
go({dir: 'forward'});
}
});
$('.forward').on('click', function(){
go({dir: 'forward'});
});
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 在另一个函数中使用变量this
- 在javascript函数中使用php变量
- setTimeout可以与闭包内的函数一起使用吗
- 使用JS函数来使用另一个函数的语法?node.js
- 如何在javascript函数中使用Razor值
- 如何在异步函数中使用javascript对象
- nodejs中匿名函数的使用
- 如何在函数之外使用变量
- 得到"未定义不是函数“;使用显示原型图案时出错
- HTML 按钮点击函数无法使用 jQuery 变量作为参数
- 绑定到 x 可编辑的成功函数未使用正确的参数执行
- 创建要在其他函数中使用的全局变量
- 可以't获取setInterval函数以使用javascript中的this.function_name调用另一
- 在.map函数中使用react道具
- 在javascript函数中使用@Html.Raw
- 如何在指令链接函数中使用从控制器传递的筛选器
- 在函数中使用这个的Javascript
- AngularJS-选择选项并在函数中使用它
- 在Zepto动画函数中使用变量