开发者

Return from inner function in JavaScript?

I have a jQuery-powered JavaScript function which iterates over a list of fields and checks to see whether they are empty; if so, blocks the submission of the form.

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

How can I structure this differently to do what I want?


Just use a variable to keep track of the validation:

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;

Or, you can just use the field-highlight class as well:

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

return $('.field-highlight').length == 0;


use a boolean in the forEach closure, which would be set to true, if the field value is empty. Check that value before submission of form


It sounds like you want to do the following

  • Update the elements with the field-highlight class based on whether or not they have a value
  • Block the form submission if any are empty

If so then try the following

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
}


Did you write the "forEach" function? If so, that could check the return value of the anon function, and if it is ever false, stop iterating.


If your required_fields is a jQuery object, you could just do this:

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

return !!stop

Or perhaps more efficient like this?

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

return !!stop
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜