为啥javascript在'return false'之后工作?

Posted

技术标签:

【中文标题】为啥javascript在\'return false\'之后工作?【英文标题】: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 那么这是怎么发生的,请帮助我

【问题讨论】:

Each function has it's own returned value! 也显示 html,但我相信 each() 内的 return false 会提前退出每个函数,而不是父函数。 但我一次只想要一个警报,但它同时显示两个 您可以用简单的for 循环替换.each,然后用break 语句替换return 【参考方案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;
    


        );

【讨论】:

以上是关于为啥javascript在'return false'之后工作?的主要内容,如果未能解决你的问题,请参考以下文章

当返回值在新行时,为啥 Javascript 返回语句不起作用?

为啥 + [] 在 Javascript 中返回 0? [复制]

为啥我可以在 JavaScript 中定义函数之前使用它?

为啥 Javascript getYear() 返回 108?

为啥 +"" 在 JavaScript 中返回 0? [复制]

为啥 Javascript 无法识别我的构造函数?