嗨,我有一个用于动态添加文本框的JavaScript验证代码,当文本框具有空值并且不在那里停止时,它将显示警报

$(document).on('click', '#med_submit', function () {
    $(".medicine_name").each(function (i) {
        var id = this.id;
        var value = $("#" + id).val();

        if (value.trim() == "") {
            alert('Medicine name should not be empty');
            return false;
        }
    });
    $(".medicine_quantity").each(function (i) {
        var id = this.id;
        var value = $("#" + id).val();

        if (value.trim() == "") {
            alert('Quantity name should not be empty');
            return false;
        }
    });
});


这是我的脚本,在medicine_name每个函数中,有一个medicine_name类文本框为空,然后显示警报消息,它也将转到下一个medicine_quantity每个函数并也显示该警报,这里我使用return false警报过后,这是怎么回事,请帮助我

最佳答案

仅在显示警报时设置一个标志,如果设置了标志,则提早保释。



$(document).on('click', '#med_submit', function() {
  var alertShown = false;

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

    if (value.trim() == "") {
      alert('Medicine name should not be empty');
      alertShown = true;
      return false;
    }

  });
  if (alertShown) return;

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

    if (value.trim() == "") {
      alert('Quantity name should not be empty');
      return false;
    }

  });
});





return false;为什么不起作用?

仅在return false;回调函数中使用.each()的原因是,所做的只是停止处理jQuery集中的其余匹配元素。

jQuery docs


  您可以通过返回false从回调函数中停止循环。


换句话说,它所做的就是使.each()调用比通常更快地完成。

但是,无论何时完成,在代码中的第一个.each()调用之后要执行的下一行代码是第二个.each()调用。它不知道第一个.each()调用会发生什么情况,因此它将从第一个匹配的元素开始并为其调用提供的函数,然后继续其余匹配的元素,除非该函数返回false,什么时候会停止。

10-05 20:48
查看更多