在函数中选择此变量或变量

时间:2016-02-10 17:15:41

标签: javascript dom addeventlistener

使用addeventlistener执行listenerForm()函数。在函数中,我得到了“this”对象来获取dom元素。现在我需要使用此函数,但我需要在参数中传递dom元素。如果我传递参数怎么区别?

for (var i = 0; i < form.length; i++) {
 form[i].addEventListener("click", listenerForm,true);
}

function listenerForm(form) {

console.log(form); //result MouseEvent {isTrusted: true}
console.log(this);//result fomr element.

}

listenerForm(domElement);

如果我用addeventlistener执行函数,我只需要得到它。如果我传递form参数,我只需要参数。 我在addeventlistener中找到了解决方案传递参数,但我无法在for循环中创建函数。

3 个答案:

答案 0 :(得分:0)

如果您不需要访问事件对象(您似乎不会这样做?)然后从事件处理程序调用该函数,而不是将其用作事件处理程序:

form[i].addEventListener("click", function() {
    listenerForm(this);
}, true);

现在参数form将始终引用DOM元素。

答案 1 :(得分:0)

试试这个:

for (var i = 0; i < form.length; i++) {
 form[i].addEventListener("click", listenerForm(this), true);
}

function listenerForm(clickedFormElement) {
console.log(clickedFormElement);//result form element
}

listenerForm(clickedFormElement);// i don't know what you're trying to do here!!

答案 2 :(得分:0)

使用currying和bind方法的解决方案是

form.forEach(function(item){
  item.addEventListener('click', listenerForm.bind(null, item));
})

现在,listenerForm的第一个参数是单击的元素,这是指全局对象