将param传递给事件侦听器中的方法而不添加匿名函数

时间:2017-11-08 02:34:37

标签: javascript jquery

我有一个元素,我添加'输入'事件侦听器并分配在元素输入期间要执行的函数。该函数接受一个参数,我想将相同的元素作为参数传递给函数,而不向事件监听器添加匿名函数。

我的事件监听器:

$(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 /元素而不使用额外的函数来传递一个参数?

1 个答案:

答案 0 :(得分:0)

您可以使用.bind()方法 [MDN]向传递给函数的参数添加自定义值:

function handleKeys(arg, e) {
  console.log(arg, e);
}

var input = document.querySelector('input');
input.addEventListener('keydown', handleKeys.bind(null, 'cats'))

Codepen

来自MDN文档:

  

bind()方法创建一个新函数,在调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

bind()有以下功能签名:

fun.bind(thisArg[, arg1[, arg2[, ...]]])

换句话说,我们在函数(bind())上调用fun。传递给.bind()的第一个参数确定thisfun关键字的值。任何其他参数都传递给fun。最后,在fun的这些参数之后提供将提供给.bind的任何其他参数。

因此,在上面的示例中,我们将空上下文绑定到handleKeys,然后传递字符串catshandleKeys()函数接收cats作为其第一个参数,然后自动传递给事件回调的event对象...