我看到很多地方有类似问题,但无法修复。
这是我的功能:
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()
但没有用。
答案 0 :(得分:3)
return
将从它所在的函数返回。在您的代码中,这是您传递给each
的匿名函数。请参阅documentation for each:
您可以通过返回
false
来停止回调函数中的循环。
您正在返回true
,而不是false
,因此您不会停止循环。在功能的第5行将true
更改为false
。
答案 1 :(得分:1)
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。
答案 2 :(得分:0)
在从主函数体返回之前,必须让.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()"
。