Javascript函数在返回时不会中断?

时间:2014-07-21 17:39:18

标签: javascript loops return break

我知道你应该能够通过返回来突破每个陈述,这就是我想要做的事情,但我必须做错事,而且看起来很简单我可以'找到它。

我有这样的代码

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,以防万一由于某些重要的原因但它没有改变任何东西。

我不明白。似乎与文档说它应该如何工作相反。

2 个答案:

答案 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>