而不是编写我自己的验证,我认为我会使用JQuery,但我也没有找到这么容易。我有几个问题希望有人能回答。首先,错误消息仅在我单击提交时出现。退出每个领域后如何让它们出现?这是我的验证代码。
代码:
$(document).ready(function(){
$("#orderForm").validate({
rules: {
shipFirstName: {
required: true,
},
shipFamilyName: {
required: true,
},
shipPhoneNumber: {
required: true,
},
shipStreetName: {
required: true,
},
shipCity: {
required: true,
},
billEmailAddress: {
required: true,
},
billPhoneNumber: {
required: true,
},
billCardNumber: {
required: true,
},
billCardType: {
required: true,
},
}, //end of rules
}); // end of validate
}); //end of function
这是我表单的HTML代码。我不会显示样式,但我已将其更改为显示红色字体。
代码:
<form id="orderForm" method="post" action="x">
<table id="formTable" cellpadding="5">
<tr>
<td>
<h3>Shipping and Billing Information</h3>
</td>
<td> </td>
</tr>
<tr>
<td><label for="shipFirstname">First Name</label></td>
<td><input id="shipFirstName" type="text" name="shipFirstName" maxlength=
"30" /></td>
</tr>
<tr>
<td><label for="shipFamilyName">Surname</label></td>
<td><input id="shipFamilyName" type="text" name="shipFamilyName" maxlength="30" /></td>
</tr>
<tr>
<td><label for="shipPhoneNumber">Contact Telephone Number</label></td>
<td><input id="shipPhoneNumber" type="text" name="shipPhoneNumber" maxlength="30" /></td>
</tr>
<tr>
<td><label for="shipStreetName">Street Name</label></td>
<td><input id="shipStreetName" type="text" name="shipStreetName" maxlength="30" /></td>
</tr>
<tr>
<td><label for="shipCity">City</label></td>
<td><input id="shipCity" type="text" name="shipCity" maxlength="30" /></td>
</tr>
<tr>
<td><label for="shipPostalCode">Postal Code</label></td>
<td><input id="shipPostalCode" type="text" name="shipPostalCode" maxlength="30" /></td>
</tr>
<tr>
<td><label for="billEmailAddress">Email address</label></td>
<td><input id="billEmailAddress" type="text" name="billEmailAddress" maxlength="30" /></td>
</tr>
<tr>
<td><label for="billPhoneNumber">Contact Telephone Number</label></td>
<td><input id="billPhoneNumber" type="text" name="billPhoneNumber" maxlength="30" /></td>
</tr>
<tr>
<td><label for="fidelityCardNumber">Fidelity card</label></td>
<td><input id="fidelityCardNumber" type="text" name="fidelityCardNumber" maxlength="30" /></td>
</tr>
<tr>
<td><label for="billCardNumber">Credit Card Number</label></td>
<td><input id="billCardNumber" type="text" name="billCardNumber" maxlength="30" /></td>
</tr>
<tr>
<td><label for="billCardType">Credit Card Type</label></td>
<td><select id="billCardType" name="billCardType">
<option value="...">
Choose your card...
</option>
<option value="visa">
Visa
</option>
<option value="mastercard">
Mastercard
</option>
</select></td>
</tr>
<tr>
<td><label for="instructions">Instructions</label></td>
<td>
<textarea id="instructions" name="instructions" rows="8" cols="30">
Enter your requirements here or comments.
</textarea></td>
</tr>
<tr>
<td colspan="2"><input id="submit" type="submit" name="Submit" value="Submit" </td>
</tr>
</table>
</form>
我也想使用正则表达式来保存邮政编码和保真卡。如何将这些内容合并到脚本中?这是正确的吗?我把它放在哪里?
$.validator.addMethod('shipPostalCode', function (value) {
return /^[A-Z]{2}\d{1,2}\s\d{1,2}[A-Z]{2}$/.test(value);
}, 'Please enter a valid Postal Code');
$.validator.addMethod('fidelityCardNumber', function (value) {
return /^[A-Z]{1}([A-Z]|\d){4}\s?([A-Z]|\d){5}\s?([A-Z]|\d){3}\d{1}(\!|\&|\@|\?){1}$/.test(value);
}, 'Please enter a valid card number');
最后一件事。这个脚本可以轻松放入外部js文件吗?我想尽可能多地从html文件中获取。
由于
答案 0 :(得分:2)
(文档)$。就绪(函数(){ $( “#orderForm”)。验证({ onfocusout:是的, 规则:{ shipFirstName:{ 要求:是的, }, shipFamilyName:{ 要求:是的, }, shipPhoneNumber:{ 要求:是的, }, shipStreetName:{ 要求:是的, }, shipCity:{ 要求:是的, }, billEmailAddress:{ 要求:是的, }, billPhoneNumber:{ 要求:是的, }, billCardNumber:{ 要求:是的, }, billCardType:{ 要求:是的, }, },//规则结束 }); //验证结束 }); //功能结束
这样就可以让每次离开某个字段时,它会自动验证它。 :)
答案 1 :(得分:1)
这应该可行,但您首先必须填写表格中的内容。尝试用名字写一些东西,然后删除它并改变焦点。
答案 2 :(得分:1)
至于添加自己的验证方法,请查看http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage
您可能还想探索使用此方法:
jQuery.validator.addClassRules({
name: {
required: true,
minlength: 2
},
zip: {
required: true,
digits: true,
minlength: 5,
maxlength: 5
}
});
来自http://docs.jquery.com/Plugins/Validation/Validator/addClassRules#rules
的示例非常,http://docs.jquery.com/Plugins/Validation表示您也可以像这样验证
这对你来说更清洁,更少JS。
答案 3 :(得分:1)
通过使用'addMethod'调用,您实际上是在添加一个'类型'验证,可以在主'验证'方法调用中使用。
$.validator.addMethod('postalCode',
function (value, element)
{
return this.optional(element) || /^[A-Z]{2}\d{1,2}\s\d{1,2}[A-Z]{2}$/.test(value);
}, 'Please enter a valid Postal Code');
$.validator.addMethod('creditCardNumber',
function(value, element)
{
return this.optional(element) || /^[A-Z]{1}([A-Z]|\d){4}\s?([A-Z]|\d){5}\s?([A-Z]|\d){3}\d{1}(\!|\&|\@|\?){1}$/.test(value);
}, 'Please enter a valid card number');
将此代码放在您拥有其他验证码的同一JS文件中。
然后,将您的验证方法调用修改为:
$(document).ready(function(){
$("#orderForm").validate({
rules: {
//Your other rules
shipPostalCode: { postalCode: true },
fidelityCardNumber : { creditCardNumber : true }
}
})
}
);
答案 4 :(得分:0)
$('#myform').validate({ onfocusout: function(element) { $(element).valid(); } };
这也可以。
答案 5 :(得分:0)
jQuery.validator.addMethod("stateUS", function(value, element) {
return this.optional(element) ||
/^(?:A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])*$/.test(value);
}, "The specified US State is invalid");`
用于验证美国州和DC的两个字母缩写。
想要评论上述内容,但没有足够的代表 - Salty的回答说要使用
onfocusout: true
然而,根据文档(并尝试它),这不是一个有效的设置。 http://jqueryvalidation.org/validate
布尔值true不是有效值。
如果你正在设置该值的真实性,你需要设置一个回调函数,它获得两个参数,元素和事件 - 就像Alistair的回答一样。