我知道你应该能够通过返回来突破每个陈述,这就是我想要做的事情,但我必须做错事,而且看起来很简单我可以'找到它。
我有这样的代码
function create() {
var test = hasThing();
if (test) {
$('#myForm').submit();
} else {
alert('you suck!')
}
}
function hasThing() {
$('.selects').each(function() {
if (this.value != "") {
return true;
}
});
return false;
}
我在"上设置了断点;返回true;"然后点击它但是var测试总是假的,因为由于某种原因,.each()循环继续并且hasThing()函数继续。我试过切换东西,以便在.each()中返回false,以防万一由于某些重要的原因但它没有改变任何东西。
我不明白。似乎与文档说它应该如何工作相反。
答案 0 :(得分:15)
您的return true;
语句从给予each
的匿名函数返回。始终执行return false;
行,这解释了var test
始终为假的原因。
将您的代码更改为
function hasThing() {
var hasThing = false;
$('.selects').each(function() {
if (this.value != "") {
hasThing = true;
return false; // breaks the $.each, but does not return from hasThing()
}
});
return hasThing;
}
答案 1 :(得分:3)
您可以使用Array.some()
检查是否有任何选项具有选定值
function hasThing() {
return $('select').toArray().some(function(el) {
return el.value != "";
})
}
function create() {
var test = hasThing();
if (test) {
alert('at least one select was changed');
//$('#myForm').submit();
} else {
alert('you suck!');
}
}
function hasThing() {
return $('select').toArray().some(function(el) {
return el.value != "";
})
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Select at least one option !</p>
<form id="myForm">
<select class="selects">
<option value="">blank</option>
<option value="2">option1</option>
</select>
<select class="selects">
<option value="">blank</option>
<option value="2">option1</option>
</select>
<input type="button" onclick="create()" value="submit" />
</form>