2010-11-24 3 views
2

У меня есть jQuery-функция JavaScript, которая выполняет итерации над списком полей и проверяет, являются ли они пустыми; если это так, блокирует подачу формы.Возврат из внутренней функции в 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

Просто используйте переменную для отслеживания проверки:

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; 
0

использовать логическое значение в замыкании Foreach, который будет установлено значение true, если значение поля пустое. Убедитесь, что значение перед отправкой формы

0

Это звучит, как вы хотите, чтобы сделать следующий

  • Update элементы с field-highlight класса в зависимости от того, имеют ли они значение,
  • Block представление формы, если любой пустуют

Если так, то попробуйте следующее

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 
} 
0

Вы пишете функцию «forEach»? Если это так, это может проверить возвращаемое значение функции анона, и если оно когда-либо ложно, прекратите итерацию.

+0

Foreach является JQuery вспомогательная функция – 2010-11-24 22:11:46

0

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