2011-10-04 52 views
1

我正在通过JSHint一些代码,我不断收到以下错误内作出功能它不会阻止报告错误。我决定重构代码,在这里使用JSHint的建议,http://www.jshint.com/options/,但我仍然收到错误。我希望有人能够帮助我稍微重构这些代码,以便它能够通过。这里的功能的副本:JSHint错误不要循环

function setSounds(parent) { 
    var i, 
     l; 

    parent.getElements('.sound').each(function (elem) { 
     var soundEvents = []; 

     if (elem.get('fk_click_sound')) { 
      soundEvents.push('click'); 
     } 

     if (elem.get('fk_mouseover_sound')) { 
      soundEvents.push('mouseenter'); 
     } 

     if (soundEvents.length !== 0) { 
      for (i = 0, l = soundEvents.length; i < l; i += 1) { 
       elem.addEvent(soundEvents[i], (function() { 
        return function (e) { 
         FKSoundAIR(FKSoundStd[this.get('fk_' + e.type + '_sound')]); 
        }; 
       })(elem), false); 
      } 
     } 
    }); 
} 

我使用MooTools的。此功能的目的是传递一个父元素,然后将声音事件应用于所有具有班级“声音”的孩子。我正在使用自定义HTML属性,例如'fk_click_sound'将更多信息提供给函数。我选择了从http://blog.jbrantly.com/2010/04/creating-javascript-function-inside.html开始的循环内分配函数的方法。

任何建议或资源,你可以指向我会很好。谢谢!

+0

你确定这是一个错误吗?这可能只是一个警告。 – Blender

+0

这只是一个警告,但它在我的ant构建过程中弹出,导致构建停止完成。 –

+0

@Spencer:你可以在顶部恢复你的编辑,提交你的解决方案作为答案,然后接受你自己的答案来结束这个问题?这将从未回答的问题列表中删除。干杯! –

回答

1

你可以尝试这样的事情:

function make_handler(div_id) { 
    return function() { 
     alert(div_id); 
    } 
} 
for (i ...) { 
    div_id = divs[i].id; 
    divs[i].onclick = make_handler(div_id); 
} 
1

您可以创建之外的功能,将其分配到一个var,并用它在您的来电addEvent

1

事实证明JS提示有一个bug re:函数内部循环的警告,他们修复了here。现在这个问题已经解决,这个问题已经解决了。

+0

问题未解决:尝试将问题中的文本粘贴到jshint.com中。我相信你的链接是关于别的。 –