【问题标题】:why javascript working after 'return false'?为什么javascript在'return false'之后工作?
【发布时间】:2015-06-03 00:27:33
【问题描述】:

您好,我有一个用于动态添加文本框的 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 那么这是怎么发生的,请帮助我

【问题讨论】:

  • 也显示 HTML,但我相信 each() 内的 return false 会提前退出每个函数,而不是父函数。
  • 但我一次只想要一个警报,但它同时显示两个
  • 您可以用简单的for 循环替换.each,然后用break 语句替换return。

标签: javascript jquery


【解决方案1】:

在显示警报时设置一个标志,如果设置了标志,请尽早退出。

$(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; 不起作用?

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

来自jQuery docs:

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

换句话说,它所做的只是让.each() 调用比正常情况更快完成。

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

【讨论】:

  • @askm3 我添加了解释为什么还不够,如果您仍然感到困惑,请告诉我。
【解决方案2】:
var blank_found = false;
$(".medicine_name").each(function (i){
   var id=this.id;
   var value=$("#"+id).val();

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

if (blank_found){
   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;
   }
 });

【讨论】:

    【解决方案3】:

    你可以用这个..

    $(document).on('click','#med_submit',function(){
    var isempty=false;
       $(".medicine_name").each(function (i)
                        {
                                var id=this.id;
                                var value=$("#"+id).val();
    
                                if(value.trim()==""){isempty=true; 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()==""){ isempty=true; alert('Quantity name should not be empty'); return false;}
    
                        });
    
    if ( isempty==true ) {
           return false;
        }
    
    
            });
    

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多