我想验证表单,以便填写所有文本输入字段。为此,我编写了下面的函数,但我的问题是它总是向我显示已验证的消息。如果我将某个字段保留为空,则会显示空的和已验证的警报。
如果您有帮助或建议更好的方法。
function validate() {
$("#myform :text").each(function(){
if($.trim(this.value).length==0){
alert("Empty!");
return false;
}
});
return 1;
}
$(document).on('click','#addnew',function() {
if(validate() != 1){
return false;
}
alert('Verified.');
});
答案 0 :(得分:4)
return false;
只会退出$.each()
循环。你需要在循环中设置一个变量,然后返回:
function validate() {
var ret = true;
$("#myform :text").each(function(){
if($.trim(this.value).length==0){
alert("Empty!");
ret = false;
return false;
}
});
return ret;
}
您需要适当更改click
处理程序(使用bool而不是-1);
答案 1 :(得分:1)
在您的代码中,空字段后面的任何已完成字段都会导致函数返回1.要解决此问题,请创建一个定义为true的变量,如果任何字段为空,则将其设置为false。
function validate() {
var isValid = true;
$('#myform :text').each(function () {
if($.trim(this.value).length === 0){
alert('Empty!');
isValid = false;
}
});
return isValid;
}
$(document).on('click', '#addnew', function () {
var isValid = validate();
if (isValid) {
return false;
}
alert('Verified.');
});
答案 2 :(得分:1)
我更改了代码以返回一个名为fail的变量,而不是尝试从函数中提前返回。应该更好地工作:
function validate() {
var fail = false;
$("#myform :text").each(function(){
if($.trim(this.value).length==0){
alert("Empty!");
fail = true;
return false;
}
});
return !fail;
}
$(document).on('click','#addnew',function() {
if(validate()){
return false;
}
alert('Verified.');
});
答案 3 :(得分:0)
首先,我发现使用console.log进行JavaScript调试而不是警报更容易(它们不会阻止脚本执行,使得时间更加明显)。
因此,看起来你的验证函数实际上从未返回-1,它返回false。因此,点击功能的比较永远不会成立,这意味着“已验证”。警报将始终显示。