javascript返回false;没有在每个功能上工作

时间:2015-02-17 06:59:55

标签: javascript jquery

我在下面提到了我的代码,我遇到了返回flase的问题;在javascript中的每个函数

$(".current_patient_medicine").each(function (i) {
    var id = this.id;
    var value = $("#" + id).val();
    if (value.trim() == "") {

        check = false;
        alert("Medicine Name cannot left Blank.");
        return false;
    } else {
        check = true;
    }
});
$(".current_patient_medicine_days").each(function (i) {
    var id = this.id;
    var value = $("#" + id).val();
    if (value.trim() == "") {

        check = false;
        alert("Days Field cannot left Blank.");
        return false;
    } else {
        check = true;
    }
});

这里是第一个条件警报"医学名称不能留空"显示良好但在此之后第二个警报也显示

3 个答案:

答案 0 :(得分:2)

你在内部函数调用中有return false,它不会停止外部函数的执行流程所以你需要

var check = true;
$(".current_patient_medicine").each(function (i) {
    var value = this.value;
    if (value.trim() == "") {
        check = false;
        alert("Medicine Name cannot left Blank.");
        return false;
    }
});
if (!check) {
    return false;
}
$(".current_patient_medicine_days").each(function (i) {
    var value = this.value;
    if (value.trim() == "") {
        check = false;
        alert("Days Field cannot left Blank.");
        return false;
    }
});
if (!check) {
    return false;
}

$('button').click(function() {
  var check = true;
  $(".current_patient_medicine").each(function(i) {
    var value = this.value;
    if (value.trim() == "") {
      check = false;
      alert("Medicine Name cannot left Blank.");
      return false;
    }
  });
  if (!check) {
    return false;
  }
  $(".current_patient_medicine_days").each(function(i) {
    var value = this.value;
    if (value.trim() == "") {
      check = false;
      alert("Days Field cannot left Blank.");
      return false;
    }
  });
  if (!check) {
    return false;
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="m1" class="current_patient_medicine" />
<input id="d1" class="current_patient_medicine_days" />
<br />
<input id="m2" class="current_patient_medicine" />
<input id="d2" class="current_patient_medicine_days" />
<br />
<button>Test</button>

答案 1 :(得分:1)

经验法则:避免在$ .each语句中返回语句

重新思考解决方案

function logic(someArray)
{
    var result = false;
    $.each(someArray, function(index,item){

        if(item == someValue)
        {
           result = true;
        }

    });

    return result;
}

这个问题花了我一整天才发现并修复。 OMG!

希望这有助于某人。

答案 2 :(得分:0)

查看$.each()的文档:

  

我们可以通过使回调函数返回false来在特定迭代中中断$ .each()循环。返回非false与for循环中的continue语句相同;它将立即跳到下一次迭代。

我稍微简化了您的代码:

var check = true;

$(".current_patient_medicine").each(function() {
  // The empty string ("") is falsey, so we can remove the comparison.
  // Also, no need to double-select the current element,
  // instead get the val() directly:
  if (! $(this).val().trim()) {
    alert("Medicine Name cannot left Blank.");
    check = false;
    return false;
  }
});

$(".current_patient_medicine_days").each(function() {
  if (! $(this).val().trim()) {
    alert("Days Field cannot left Blank.");
    check = false;
    return false;
  }
});

此代码会在第一次看到空的.current_patient_medicine值时发出警报,然后在第一次看到空的.current_patient_medicine_days值时发出警报。