代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

在javascript中从内部函数返回?

  •  2
  • Jake Petroules  · 技术社区  · 14 年前

    我有一个jquery支持的javascript函数,它迭代一系列字段并检查它们是否为空;如果为空,则阻止提交表单。

    required_fields.forEach(function(field) {
        if (field.val() == '')
        {
            field.addClass('field-highlight');
            return false;
        }
        else
        {
            field.removeClass('field-highlight');
        }
    });
    
    // I want to return to here from the return false point
    

    我怎样才能以不同的方式构造它来做我想做的事情?

    5 回复  |  直到 14 年前
        1
  •  5
  •   Tatu Ulmanen    14 年前

    只需使用变量跟踪验证:

    var is_valid = true;
    
    required_fields.forEach(function(field) {
        if (field.val() == '') {
            field.addClass('field-highlight');
            is_valid = false;
            return false;
        } else  {
            field.removeClass('field-highlight');
        }
    });
    
    return is_valid;
    

    或者,您可以使用 field-highlight 等级也包括:

    required_fields.forEach(function(field) {
        if (field.val() == '') {
            field.addClass('field-highlight');
            return false;
        } else  {
            field.removeClass('field-highlight');
        }
    });
    
    return $('.field-highlight').length == 0;
    
        2
  •  0
  •   Salman Paracha    14 年前

    在foreach闭包中使用布尔值,如果字段值为空,则该值将设置为true。在提交表单前检查该值

        3
  •  0
  •   JaredPar    14 年前

    听起来你想做以下的事情

    • 使用更新元素 field-highlight 基于它们是否具有值的类
    • 如果有空,则阻止表单提交

    如果是,请尝试以下操作

    var anyEmpty = false;
    required_fields.forEach(function() {
      if ($(this).value() == '') {
        $(this).addClass('field-highlight');
        anyEmpty = true;
      } else {
        $(this).removeClass('field-highlight');
      }
    });
    
    if (anyEmpty) {
      // Block the form
    }
    
        4
  •  0
  •   JeremyWeir    14 年前

    你写过“foreach”函数吗?如果是这样,就可以检查anon函数的返回值,如果是false,就停止迭代。

        5
  •  0
  •   user113716    14 年前

    如果你的 required_fields 是jquery对象,可以这样做:

    var stop = required_fields.removeClass('field-highlight')
                              .filter("[value == '']").addClass('field-highlight')
                              .length;
    
    return !!stop
    

    或者像这样更有效?

    var stop = required_fields.filter('.field-highlight').removeClass('field-highlight')
                              .end().filter("[value == '']").addClass('field-highlight')
                              .length;
    
    return !!stop