JSlint:意外'for'

我一直在用单选button进行testing。 一切似乎没关系,直到我通过JS lint运行它。 我修复了除一个之外的所有错误

意想不到的'为'

for (i = 0; i < radios.length; i += 1) { 

这是我的Javascript:

 /*global body,window,document,alert*/ (function () { "use strict"; var UIlogic; UIlogic = { myLoad: function () { var elems, elemText, btn1, winter, summer, fall, spring, header, btns; winter = "<div><input type='radio' name='cb' id='cbA' value='0'/><label for='cbA'>Winter</label></div>"; summer = "<div><input type='radio' name='cb' id='cbB' value='1'/><label for='cbB'>Summer</label></div>"; fall = "<div><input type='radio' name='cb' id='cbC' value='2'/><label for='cbC'>Fall</label></div>"; spring = "<div><input type='radio' name='cb' id='cbD' value='3'/><label for='cbD'>Spring</label></div>"; header = "Header"; btns = "<br /><button class='btns' id='btn1'>Go!</button>"; elemText = "Menu/nav"; elems = "<center><div>" + header + "</div></center>";//title elems += "<div>" + elemText + "</div></center>";//menu elems += "<div id='container'><br />";//container opens elems += "<div id='div1'>" + winter + "</div>"; elems += "<div id='div2'>" + summer + "</div>"; elems += "<div id='div2'>" + fall + "</div>"; elems += "<div id='div2'>" + spring + "</div>"; elems += "<div id='div3'>" + btns + "</div>"; elems += "</div>";//container closes elems += "<h6><div id='footer'>Ehawk 2015</div></h6>"; body.innerHTML = elems; btn1 = document.getElementById("btn1"); btn1.addEventListener('click', UIlogic.intoFunction, false); }, intoFunction: function () { var radios, found, i = 0; radios = document.getElementsByName("cb"); found = 1; for (i = 0; i < radios.length; i += 1) {//issue occurs here if (radios[i].checked) { alert(radios[i].value); found = 0; break; } } if (found === 1) { alert("Please Select Radio"); } } }; window.onload = function () { UIlogic.myLoad(); }; }()); 

我运行我的循环错了吗? 为什么JSlint在这里看到一个问题,甚至认为代码的作品? 我真的可以使用循环中的一些洞察力,因为我有他们最多的问题。 我被告知不要使用它们,但我没有看到运行循环检测单选button和检查收音机的问题。 这是我应该关心的吗?

JSLintbuild议您使用forEach等其他循环。 http://www.jslint.com/help.html#for

你可以在底部select宽容的“for语句”选项,如果这样做会让你困扰,但代码看起来不错。

这是我能为你find的最好的解释 ,

最近我决定我不需要再用了。 我完成for循环。 for循环被发明,他们从Fortran出来。 他们的目的是成为一个通过数组工作的方式,但是在ES5中,我们添加了forEach()map()以及所有其他的东西,我就像是“是的,就是这样做”。 for语法与其中的三个语句是非常奇怪的。

Crockford进一步继续谈论在ES6中完全使用循环结构,而只使用function结构。

你可以select忽略它 – 只要将选项传递给JSLint来容忍。


但是,假设您决定取消您的for循环。 你可以用every() 。 这将是像(未testing):

 intoFunction: function () { var radios, found; radios = document.getElementsByName("cb"); found = Array.prototype.slice.call(radios).every(function(radio) { if (radio.checked) { alert(radio.value); return false; } return true; }); if (found) { alert("Please Select Radio"); } } 

在我看来,如果这更容易理解一个for循环,这是诚实的争论。 老实说,这取决于你自己的个人/项目的编码标准。


更新一个工作片断展示every()来完成这个任务。

 function into() { var radios, found; radios = document.getElementsByName("cb"); found = Array.prototype.slice.call(radios).every(function(radio) { if (radio.checked) { alert(radio.value); return false; } return true; }); if (found) { alert("Please Select Radio"); } } jQuery("[name='cb']").on("click", into); jQuery("button").on("click", function() { jQuery("[name='cb']").prop("checked", false); into(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p> <label> <input type="radio" name="cb" value="M">Male</label> </p> <p> <label> <input type="radio" name="cb" value="F">Female</label> </p> <p> <label> <input type="radio" name="cb" value="I">I don't know</label> </p> <p> <label> <input type="radio" name="cb" value="B">Both</label> </p> <p> <button>Clear Radios</button>