Javascript函数在返回时不会中断?
我知道你应该能够通过返回来打破每个语句,这正是我试图做的,但我一定是做错了什么,它看起来很简单,我找不到它 我有这样的代码Javascript函数在返回时不会中断?,javascript,loops,return,break,Javascript,Loops,Return,Break,我知道你应该能够通过返回来打破每个语句,这正是我试图做的,但我一定是做错了什么,它看起来很简单,我找不到它 我有这样的代码 function create() { var test = hasThing(); if (test) { $('#myForm').submit(); } else { alert('you suck!') } } function hasThing() { $('.selects').each(function() { i
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测试总是错误的,因为出于某种原因。每个循环继续,hasThing函数继续。我试着转换一些东西,这样我就可以在中返回false。每一个都是为了以防万一,因为一些重要的原因,但它没有改变任何事情
我不明白。似乎与文档所述的工作方式相反。您可以使用Array.some来检查任何选择是否具有选定值
function hasThing() {
return $('select').toArray().some(function(el) {
return el.value != "";
})
}
函数创建{
var检验=hasshing;
如果测试{
警报“至少有一个选择已更改”;
//$'myForm'。提交;
}否则{
警惕“你真烂!”;
}
}
函数hasshing{
返回$'select'.toArray.somefunctionel{
返回el.value!=;
}
}
至少选择一个选项
空白的
选择1
空白的
选择1
你的回报是真实的;语句从给定给每个函数的匿名函数返回。返回错误;行总是被执行,这解释了为什么var测试总是错误的
将代码更改为
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;
}
中断。每个都必须返回false,并且从内部返回的each循环不会从外部函数返回。似乎与文档中所述的工作方式相反。-文档中说,可以通过返回false从回调函数中停止循环。该行为如何与文档不一致?更易于阅读,因此也更易于维护,尽管由于其他建议支持短路,其效率可能要低得多。取决于this.value=逻辑的实际复杂程度以及匹配的元素数量。希望普通jQuery有一个.any函数。@JDB-它有,Array.some,但是值必须映射到一个数组,它实际上没有效率,使用过滤器在这里不应该是问题。Doh。这将平均为您节省一半的计算周期和时间,而且实现起来也不会特别困难。@JDB-我不知道怎么做,它看起来像->。。。[].some.call$'.selects',函数e{return!!e.value;}??或者用$0.trim,谢谢。这很好地解释了我的错误。