【问题标题】:Exit from a javascript function从 javascript 函数中退出
【发布时间】:2013-04-01 07:55:16
【问题描述】:

我在很多地方看到过类似的问题,但无法解决。

这是我的功能:

function validate_form(){
     $('#form_data input[type="text"]').each(function(){
            value = $(this).val().trim();
            if(value != '' && value != null && value != 0 ){
                   return true;
            }
     });
     return false;      
}

它没有在return true; 上退出。我也试过e.preventDefault(),但没用。

【问题讨论】:

  • 应该是return false
  • @DipeshParmar 使用 break 给我错误
  • @DipeshParmar 这是 jQuery 的 .each() 方法。它不是内置循环结构,所以break 不起作用。
  • 该函数究竟应该做什么?如果至少填写了一个字段,该表格是否被视为有效?还是必须填写所有字段?

标签: javascript jquery


【解决方案1】:

return 将从它所在的函数返回。在您的代码中,这是您传递给each 的匿名函数。见documentation for each

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

您返回的是true,而不是false,因此您不会停止循环。在函数的第 5 行将 true 更改为 false

【讨论】:

  • 但是如果你返回false,最后你不会知道.each()为什么会结束。
  • validate_form的范围内设置一个变量,然后返回false。
【解决方案2】:
function validate_form(){
     $texts=$('#form_data input[type="text"]'); //cache the object
     var len = $texts.length;
     var validItems=0;
     $texts.each(function(){
            value = $(this).val().trim();
            if(value === ''){ // value of a text input cannot be null
                              // or zero unless you've changed in with JS
                   return false;
            }
            validItems++;
     });
     return len===validItems;      
}

该函数不会准确显示哪些项目无效,如果任何项目无效,则返回 false。

【讨论】:

    【解决方案3】:

    您必须让.each() 完成,然后才能从主函数体返回。您可以保留遇到的有效条目的计数器,并让返回值取决于它:

    function validate_form()
    {
        var items = $('#form_data input[type="text"]'),
        count = items.length,
        valid = 0;
    
        items.each(function() {
            value = $(this).val().trim();
            if (value != '' && value != null && value != 0 ) {
                ++valid;
            }
        });
    
        return valid !== count;
    }
    

    顺便说一句,如果至少有一个无效条目,我已将返回值更改为false;假设您将其用作onsubmit="return validate_form()"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-19
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2019-03-24
      相关资源
      最近更新 更多