Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数在返回时不会中断?_Javascript_Loops_Return_Break - Fatal编程技术网

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,谢谢。这很好地解释了我的错误。