【发布时间】:2010-12-01 01:12:14
【问题描述】:
我有一个类似这样的代码来查看某些单选按钮是否已被选中。当我发现一组具有相同名称值的单选按钮并且没有一个被检查时,我正在使用 jquery 的 .each 函数来显示警报。当我找到一个时,我想触发警报并返回 false,但在显示警报后,.each 的执行停止,但 .each 函数之后的行被执行(我的意思是执行真值)。
$(":radio").each(function(){
var name = $(this).attr('name');
var numAnswered = $(":radio").filter('[name='+name+']').filter(":checked").length;
var notAnswered = numAnswered == 0;
if(notAnswered){
alert("Must answer all questions");
return false;
}
});
console.log('still goes here even when alert is fired');
return true;
我怎样才能避免这种情况?
谢谢。
【问题讨论】:
-
您是在另一个排序容器中的单选按钮组吗?以这种方式循环会更有效率,比如
$(".container").each(...然后检查$(this).find(":radio:checked").length,总体上检查的次数会少得多。 -
@Nick Craver 我知道它会更有效率,但我不希望这个功能依赖于单选按钮在 html 上的显示方式,因为它可能会在以后更改并且可能会有不止一个“广播组”在同一个容器中。
-
只要它们在您可以识别的某种类型的容器中,即使您这样做了,也可以使其更加更有效率
$(":radio").closest("div").each(...)例如使其不可知。 -
@Nick Craver 好的,问题是现在在表格中,但以后可以在 div 中。我知道我可以使用 .closest("div") 或 .closest("table"),而且我知道以我正在做的方式去做是非常低效的。但我想避免任何人更改布局(某些 div 的表格)而忘记在此函数中更改它,但也许更高效值得冒险。
-
不管怎样,只要把它放在那里。请注意,您的 JavaScript 很少能与 DOM 结构无关和高效:)
标签: javascript jquery