无法理解此验证未按预期工作的原因
Unable to understand why this validation is not working as intended
我的问题是,我想以javascript面向对象的方式验证我的表单,但我无法使其工作。
这是小提琴
HTML:------------------------------------------------------------------------------------------------------
<form id="contact-form" action="#" method="get">
<ul>
<li><input type="text" id='fname' name='fname' class='required' placeholder="Firstname"/></li>
<li><input type="text" id='lname' name='lname' class='required' placeholder="Lastname"/></li>
<li><input type="password" id='pwd' name='pwd' class='required' placeholder="Password"/></li>
<li><input type="password" id='confPwd' name='confPwd' class='required' placeholder="Confirm password"/></li>
<li><input type="text" id='email' name='email' class='required' placeholder="Email"/></li>
<li><input type="text" id='website' name='website' class='required' placeholder="Website"/></li>
<li>
<input type="submit" id='submit' value="Submit" />
</li>
</ul>
</form>
JS&JQUERY:---------------------------------------------------------------------------------------------
var formValidate = {
validate: function(elem) {
var frm = elem.attr('id');
$('.required', '#' + frm).each(function() {
if ($(this).val() === '') {
alert($(this).attr('id') + ' is a required field.'); //<---gets here
$(this).focus();
return false; // <--not returning false
}
});
}
};
$(function() {
$('form').submit(function() {
formValidate.validate($('form'));
});
});
http://jsfiddle.net/mNu2a/3/
您需要在submit
处理程序中返回验证标志。
$(function () {
$('form').submit(function () {
return formValidate.validate($('form'));
});
});
此外,您的return语句只是中断了each
函数,而不是从validate
方法返回。
validate: function (elem) {
var isValid = true;
var frm = elem.attr('id');
$('.required', '#' + frm).each(function () {
if ($(this).val() === '' && isValid) {
alert($(this).attr('id') + ' is a required field.');
$(this).focus();
isValid = false;
return false;
}
});
return isValid;
}
您可以稍微简化验证功能:
http://jsfiddle.net/mNu2a/4/
validate: function (elem) {
var isValid = true;
$('.required', elem).each(function () {
var $this = $(this);
if ($this.val() === '' && isValid) {
alert($this.attr('placeholder') + ' is a required field.');
$this.focus();
isValid = false;
return false;
}
});
return isValid;
}
使用e.preventDefault()
$(function () {
$('form').submit(function (e) {
e.preventDefault();
formValidate.validate($('form'));
});
});
var formValidate = {
validate: function(elem) {
var frm = elem.attr('id');
$('.required', '#' + frm).each(function() {
if ($(this).val() === '') {
alert($(this).attr('id') + ' is a required field.');
$(this).focus();
return false; // <- affects "each" scope, not function scope
}
});
}
};
更改为:
var formValidate = {
validate: function(elem) {
var frm = elem.attr('id');
var invalid = 0;
$('.required', '#' + frm).each(function() {
if ($(this).val() === '') {
alert($(this).attr('id') + ' is a required field.');
$(this).focus();
invalid++;
return false; // <- affects "each", therefore stopping the loop
}
});
// add these, to also return value from function
if (invalid > 0) return false;
return true;
}
};
对于您的提交处理程序:
$(function() {
$('form').submit(function() {
return formValidate.validate( $(this) ); // you must pass the returned value to your submit callback
});
});
一个工作示例:http://jsfiddle.net/psycketom/QnbKU/
相关文章:
- 自定义验证器不工作
- JavaScript表单验证-“;“错误”;不按需要工作
- javascript正则表达式验证未按预期工作
- 表单验证工作不正常,在不检查条目的情况下继续
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 表单验证在接近尾声时停止工作
- 在键上验证正在工作,但在按键时它不起作用
- 表单验证在 HTML 中工作的 Visualforce 中不起作用
- CSS 类在验证时只工作一次
- 在角度验证中禁用 ng 无法按预期工作
- 为什么我的 Javascript 表单验证无法正常工作
- RubyonRails中的JavaScript表单验证-让JS正常工作,但我该把它放在哪里
- 添加Jquery验证后,Jquery日期选择器无法工作
- 输入字段验证的键代码函数在chrome中没有按预期工作
- 使用javascript的十进制验证未按预期工作
- 我正在尝试使用jqueryValidation引擎插件验证注册表单,有些验证无法正常工作
- 主干.js:在将模型添加到集合之前不进行工作验证
- 不;对传递给指令AngularJS的表单进行工作验证
- 不能正常工作验证引导jalali日期拾取器
- 为什么这个JQuery点击功能不工作?(验证按钮)