- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以使用 jQuery 验证器将字段标记为有效,或者询问另一种方式,以远程其关联的错误映射。我正在使用两种自定义 ajax 验证方法,这意味着我的验证方法不能返回 true 或 false。因此,我尝试使用 showErrors: { field: false } (并标记 validator.invalid.field=false )隐藏错误,但我猜测仍然保留了一些错误映射,这会阻止表单在 onsubmit: true 时提交。如果我设置 onsubmit: true ,即使 ajax 验证字段之一显示错误,表单也会提交!
$(document).ready(function () {
var validator = $(".formframe").validate({
groups: { phone: "phone_1 phone_2 phone_3" },
rules: {
FirstName: { required: true },
LastName: { required: true },
Email: { required: true, email_custom: true },
phone_1: { required: true }, // these two fields get a phone validation rule
phone_2: { required: true }, // added upon validation triggered by phone_3
phone_3: { required: true, phone: true },
Address1: { required: true },
City: { required: true },
PostalZipCode: { required: true, postalcode: true },
CustField1: { required: true, range: [1950,2012] }
},
messages: {
FirstName: "S'il vous plaît entrer votre prénom",
LastName: "S'il vous plaît entrer votre nom de famille",
Email: "S'il vous plaît entrer une adresse email valide",
phone_1: "S'il vous plaît entrer votre numéro de téléphone",
phone_2: "S'il vous plaît entrer votre numéro de téléphone",
phone_3: {
required: "S'il vous plaît entrer votre numéro de téléphone",
phone: "Numéro de téléphone doit être réel"
},
Address1: "S'il vous plaît, entrer votre adresse",
City: "S'il vous plaît, entrer votre ville",
PostalZipCode: {
required: "S'il vous plaît entrer votre code postal",
postalcode: "S'il vous plaît entrer votre code postal"
},
CustField1: {
required: "S'il vous plaît entrer votre dernière année d'études",
range: "Entrer une année de l'obtention du diplôme réel"
}
},
onfocusout: function(element) { $(element).valid(); },
errorPlacement: function(error, element) {
if (element.attr("name") == "phone_1" || element.attr("name") == "phone_2" || element.attr("name") == "phone_3") {
error.insertAfter("#phone_3");
} else {
error.insertAfter(element);
}
},
onkeyup: false,
onsubmit: true
}); console.log(validator);
// custom email validation method
$.validator.addMethod("email_custom", function(value, element) {
var verify = $.tdverify({
// Use TowerData's domain authentication for best security
// or set your license key here
'license' : 'xxx',
// This is the data to validate
// The values here are the IDs of the input fields.
// See demo.js on how to use jQuery or DOM to specify fields.
'email' : $('#Email'),
});
// These are the API settings.
verify.set({
'settings' : {
'valid_email' : 'mailbox', // Enable email validation of mailbox.
// Use value of 'syntaxdomain' for syntax and
// domain validation only.
'timeout' : 5 // Set timeout to 5 seconds
}
});
// because this function uses a callback, we can't return true to the validation
// method, instead we set validator.invalid.[field name] = false so the form submits
verify.process({
'onSuccess' : function(data, textStatus, xhr) {
if (typeof data.email == "object" && data.email.ok == false) {
//validator.showErrors({"Email": data.email.status_desc});
validator.defaultShowErrors();
} else {
validator.showErrors({"Email": false});
delete validator.invalid["Email"];
console.log(validator);
}
},
'onError' : function() {
validator.showErrors({"Email": "Email validation timeout"});
}
});
});
// custom phone validation method
$.validator.addMethod("phone", function(value, element) {
// concatenate phone number parts into a single hidden field
$("#phone").val($("#phone_1").val() + $("#phone_2").val() + $("#phone_3").val());
// initially only phone_3 has validation enabled, this allows the phone number to be
// typedfrom start to finish, adding the phone class to phone_1 and phone_2
// will cause them to be validated if they are changed
$("#phone_1,#phone_2").addClass("phone");
var verify = $.tdverify({
// Use TowerData's domain authentication for best security
// or set your license key here
'license' : 'xxx',
// This is the data to validate
// The values here are the IDs of the input fields.
// See demo.js on how to use jQuery or DOM to specify fields.
'phone' : $("#phone")
});
// These are the API settings.
verify.set({
'settings' : {
'valid_phone' : true, // Enable phone validation
'timeout' : 5 // Set timeout to 5 seconds
}
});
verify.process({
'onSuccess' : function(data, textStatus, xhr) {
if (typeof data.phone != "undefined" && data.phone.ok == false) {
//validator.showErrors({"phone": data.phone.status_desc});
validator.defaultShowErrors();
} else {
validator.showErrors({"phone_3": false});
delete validator.errorMap["phone_1"];
delete validator.errorMap["phone_2"];
delete validator.errorMap["phone_3"];
delete validator.invalid["phone_1"];
delete validator.invalid["phone_2"];
delete validator.invalid["phone_3"];
console.log(validator);
}
},
'onError' : function() {
validator.showErrors({"phone_3": "Phone validation timeout"});
}
})
});
$.validator.addMethod("postalcode", function(postalcode, element) {
if(postalcode.length == 6 && !parseInt(postalcode)){
// no space in postal code
var s = postalcode.substring(0,3) + ' ' + postalcode.substring(3);
element.value = s;
}
return this.optional(element) || postalcode.match(/(^[ABCEGHJKLMNPRSTVXYabceghjklmnpstvxy]{1}\d{1}[A-Za-z]{1} ?\d{1}[A-Za-z]{1}\d{1})$/);
});
// phone number auto-tabbing
$('#phone_1').autotab({ target: 'phone_2', format: 'numeric' });
$('#phone_2').autotab({ target: 'phone_3', format: 'numeric', previous: 'phone_1' });
$('#phone_3').autotab({ previous: 'phone_2', format: 'numeric' });
$("#PostalZipCode").autotab_filter('alphanumeric');
// allows only numeric input:
// this keydown binding won't allow letters at all, the above autotab
// numeric format simply removes anything typed that isn't within 0-9
$("#phone_1,#phone_2,#phone_3,#CustField1").keydown(function(event) {
// Allow: backspace, delete, tab, escape, and enter
if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
// Allow: Ctrl+A
(event.keyCode == 65 && event.ctrlKey === true) ||
// Allow: home, end, left, right
(event.keyCode >= 35 && event.keyCode <= 39)) {
// let it happen, don't do anything
return;
} else {
// Ensure that it is a number and stop the keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
event.preventDefault();
}
}
});
// automatically capitalize letters in postal code
$("#PostalZipCode").keyup(function() {
$(this).val(($(this).val()).toUpperCase());
});
});
最佳答案
在向提交按钮添加“取消”类后,我能够执行submitHandler,这阻止了提交时的验证。我尝试设置 onsubmit: false 但允许提交无效的表单。奇怪的是,设置 onsubmit: true (默认行为)并向提交按钮添加 class="cancel"会在表单有效时触发submitHandler,并且不允许提交无效表单。
这是我的submitHandler,它检查validator.invalid 是否为空并且没有空字段。这会阻止在所有字段都为空时提交。我确信有一种更优雅的方法来删除自定义 ajax 验证方法(与它们相关的费用)并让表单在提交之前使用所需的规则重新验证。
submitHandler: function(form) {
var emptyFields = false;
$(":input").each(function() {
if ($(this).val() === "") emptyFields = true;
});
if ($.isEmptyObject(validator.invalid) && !emptyFields) { // all is valid, submit
form.submit();
} else {
alert("Please correct some errors");
}
}
此外,为了让 form.submit() 在 Safari 中工作,我必须将其名称从 name="submit"更改为 name="send"(除了提交之外的其他名称),请参阅以下链接: http://www.luqmanmarzuki.com/read/20101222/jquery_form_validation_not_submitting_in_safari.html http://api.jquery.com/submit/#comment-106178333
这是另一个解决方案: JQuery Validate - class="cancel" submit button only stops validation once
关于validation - jQuery 验证器将字段标记为有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11321799/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!