Javascript 将当前元素作为参数传递给循环中的回调函数

Javascript 将当前元素作为参数传递给循环中的回调函数,javascript,html,callback,event-handling,jslint,Javascript,Html,Callback,Event Handling,Jslint,实际上,我正在做一个关于HTML5表单和自定义UI界面验证更新的非常简单的示例。就行为而言,我与结果非常接近,但是我的JS代码中有一点细节 基本上,我将一个输入事件附加到所有表单的输入元素。 回调函数只需检查当前元素的有效性,并应用自定义类以类似“实时”的方式设置元素的样式 我面临的唯一问题是,我需要将当前元素传递给事件处理程序中回调函数的参数。因为我需要将此事件附加到每个输入元素,所以我使用for循环 我得到了jslint警告:不要在循环中生成函数 我不知道如何解决这个问题(我确实理解它的意思

实际上,我正在做一个关于HTML5表单和自定义UI界面验证更新的非常简单的示例。就行为而言,我与结果非常接近,但是我的JS代码中有一点细节

基本上,我将一个输入事件附加到所有表单的输入元素。 回调函数只需检查当前元素的有效性,并应用自定义类以类似“实时”的方式设置元素的样式

我面临的唯一问题是,我需要将当前元素传递给事件处理程序中回调函数的参数。因为我需要将此事件附加到每个输入元素,所以我使用for循环

我得到了jslint警告:不要在循环中生成函数

我不知道如何解决这个问题(我确实理解它的意思)。我不知道在不使用匿名函数的情况下,如何将元素作为参数传递给回调函数

所以问题是:如何将当前元素作为参数传递给外部函数以解决jslint警告

如果有人能找到更好的方法来处理这个问题,并能将其更正为更高效的代码,那将是非常感激的。这是一个可以在以后对一些学生起作用的例子


这里有一个代码笔:

您可以将
check
直接传递给
addEventListener()
,而不是定义一个只调用
check()
的新函数:


我没有对jsLint进行测试,但它确实避免了在循环的每次迭代中创建新函数。

您的问题可以通过替换for循环并添加函数来解决:

for (var i=0; i<inputs.length; i++) {
    attachCheck(inputs[i]);
}
function attachCheck(inp) {
    inp.addEventListener('input', function() {
        check(this);
    });
}
循环:

for (var i=0; i<inputs.length; i++) {
    inputs[i].addEventListener('input', check);
}

用于(var i=0;经过编辑,它可能会更明显。将js代码传递给jslint,它应该是明显的。非常感谢Adrian,这确实有一些技巧,但不是跨浏览器的,但是最终使用本文找到了一个解决方法,在check函数中使用这一点就完成了这个技巧,最简单的解决方案,所以我将投票决定这一个是最佳答案
for (var i=0; i<inputs.length; i++) {
    attachCheck(inputs[i]);
}
function attachCheck(inp) {
    inp.addEventListener('input', function() {
        check(this);
    });
}
function check() {
    if(this.value.length) {
        // ... all elm replaced by this ...
}
for (var i=0; i<inputs.length; i++) {
    inputs[i].addEventListener('input', check);
}