Javascript函数在返回时不会中断?
Posted
技术标签:
【中文标题】Javascript函数在返回时不会中断?【英文标题】:Javascript function doesn't break on return? 【发布时间】:2014-09-12 07:47:38 【问题描述】:我知道你应该能够通过返回来打破每个语句,这是我正在尝试做的,但我一定做错了什么,看起来很简单,我找不到它。
我有这样的代码
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;
我在“return true;”上设置了断点并点击它,但 var test 总是错误的,因为出于某种原因 .each() 循环继续并且 hasThing() 函数继续。我已经尝试过切换,以便我在 .each() 中返回 false 以防万一出于某种重要的原因,但它没有改变任何东西。
我不明白。似乎与文档所说的应该如何工作相反。
【问题讨论】:
打破.each
你有返回false
,从each
循环内部返回不会从外部函数返回。
Seems counter to how the documentation says it should work.
- 文档说“您可以通过返回 false 从回调函数中停止循环”。行为如何不符合文档?
【参考方案1】:
您的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;
【讨论】:
谢谢。这很好地解释了我的错误。【参考方案2】:您可以使用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>
【讨论】:
更容易阅读(因此也更容易维护),尽管效率可能低得多,因为其他建议支持“短路”。取决于this.value =
逻辑的实际复杂程度以及匹配的元素数量。希望香草 jQuery 有一个“.any()”函数。
@JDB - 确实如此,Array.some
,但是必须将这些值映射到一个数组,它实际上并没有效率更高,在这里使用过滤器应该不是问题。
多哈。平均而言,这将为您节省一半的计算周期(和时间),并且实施起来不会特别困难。
@JDB - 我看不出来,它看起来像 -> jsfiddle.net/Lxg4k/1
...[].some.call($('.selects'), function(e) return !!e.value; )
?? (或者当然是$.trim()
)以上是关于Javascript函数在返回时不会中断?的主要内容,如果未能解决你的问题,请参考以下文章
调用 NSManagedObject 函数会中断,但在访问变量时不会中断
前端面试 JavaScript— forEach中return有效果吗?如何中断forEach循环?
前端面试 JavaScript— forEach中return有效果吗?如何中断forEach循环?