我有一个元素,我添加'输入'事件侦听器并分配在元素输入期间要执行的函数。该函数接受一个参数,我想将相同的元素作为参数传递给函数,而不向事件监听器添加匿名函数。
我的事件监听器:
$(element).on('input', testMethod);
我的测试方法:
function testMethod(paramElement)
{
// Do something
}
我希望在元素输入期间将元素作为param元素传递给testMethod。目前,当我在元素上输入任何内容时,我的paramElement是一个jquery事件,该元素在event.target中。我希望我的param元素直接是一个javascript元素,而不是一个jquery事件。
为此,我尝试在事件监听器中添加一个匿名函数(如下所示),这是有效的,但我试图弄清楚我是否可以在不添加匿名函数的情况下传递参数。
具有匿名功能的事件监听器:
$(element).on('input', function(){testMethod(event.target);});
有没有办法传递param /元素而不使用额外的函数来传递一个参数?
答案 0 :(得分:0)
您可以使用.bind()
方法 [MDN]向传递给函数的参数添加自定义值:
function handleKeys(arg, e) {
console.log(arg, e);
}
var input = document.querySelector('input');
input.addEventListener('keydown', handleKeys.bind(null, 'cats'))
来自MDN文档:
bind()方法创建一个新函数,在调用时,它具有它 此关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
bind()有以下功能签名:
fun.bind(thisArg[, arg1[, arg2[, ...]]])
换句话说,我们在函数(bind()
)上调用fun
。传递给.bind()
的第一个参数确定this
内fun
关键字的值。任何其他参数都传递给fun
。最后,在fun
的这些参数之后提供将提供给.bind
的任何其他参数。
因此,在上面的示例中,我们将空上下文绑定到handleKeys
,然后传递字符串cats
,handleKeys()
函数接收cats
作为其第一个参数,然后自动传递给事件回调的event
对象...