ASP.net MVC 3 jQuery 验证;禁用不显眼的 OnKeyUp?
Posted
技术标签:
【中文标题】ASP.net MVC 3 jQuery 验证;禁用不显眼的 OnKeyUp?【英文标题】:ASP.net MVC 3 jQuery Validation; Disable Unobtrusive OnKeyUp? 【发布时间】:2011-12-22 18:55:52 【问题描述】:有没有办法禁用某个验证器(信用卡)的 jQuery 验证,以便它只发生在 onblur,而不是 onkeyup?
根据 jQuery Validator 文档,我认为我可以这样做:
$(function ()
$("[data-val-creditcard]").validate(
onkeyup: false
)
);
但是,它似乎不起作用。
我还尝试在我的验证器上执行以下操作:
public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute>
string _message;
public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute)
: base(metadata, context, attribute)
_message = attribute.ErrorMessage;
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
var rule = new ModelClientValidationRule
ErrorMessage = _message,
ValidationType = "creditcard"
;
rule.ValidationParameters.Add("onkeyup", false);
return new[] rule ;
它也不起作用,但我只是在尝试正确使用 ValidationParameters。
在表单中输入信用卡号并让它随机地从无效变为有效,然后又变为无效,这有点烦人。
有什么想法吗?谢谢!
【问题讨论】:
【参考方案1】:好吧,伙计们,
我遇到了同样的问题,发现了这个帖子:http://old.nabble.com/-validate--onkeyup-for-single-field-td21729097s27240.html
这个想法基本上是覆盖keyup事件并返回false。因此,在您的具体情况下,您需要添加:
$('#my-form').validate(
rules:
[...]
// Disable keyup validation for credit card field
$("[data-val-creditcard]").keyup(function() return false );
您会看到您的信用卡字段仅在 blur 或 submit 上进行检查(但其余部分也在 keyup 上工作)。
我一直在寻找相同的解决方案,发现这里的答案可以改进,所以我认为在这里分享它会很好。
【讨论】:
通过返回 false 来禁用 keyup 的绝妙技巧。 这是我发现的唯一能够抑制 keyup 验证的方法。当我为了验证输入而进行 ajax 调用时,这太过分了。最后,我在 input 元素上设置了一个 data 属性,该属性由 input 元素的 onchange 事件的 ajax 结果控制。这允许 jquery validate 有一个简单的返回 true 或 false,同时仍然向服务器发出请求以进行数据库验证。 有几个事件要抑制,我为它们做了一个简单的占位符var fnfalse = function() return false;
,然后用它来阻止功能,$(element).keyup(fnfalse).blur(fnfalse).focusout(fnfalse);
。
2018 年仍在工作!非常感谢,你拯救了我的一天。
链接失效了:(【参考方案2】:
$.validator.setDefaults
不适用于不显眼的验证,因为验证器是在内部初始化的。
要更改使用不显眼验证的表单上的设置,您可以执行以下操作:
var validator = $("form").data("validator");
if (validator)
validator.settings.onkeyup = false; // disable validation on keyup
【讨论】:
aspnet.uservoice.com/forums/41201-asp-net-mvc/suggestions/… 这会禁用所有元素的 keyup 验证触发器,不是吗?他在问如何仅对 1 个元素禁用它。【参考方案3】:我意识到这是一篇旧帖子,但似乎没有一个回复能回答这个问题,
如何禁用onkeyup和启用onblur?
我一直在寻找这个,所以想我会分享答案。
正如 Ben Foster 所说,onkeyup 可以通过执行以下操作来禁用
var validator = $("form").data("validator");
if (validator)
validator.settings.onkeyup = false;
要启用 onblur 验证,我们可以使用 onfocusout
validator.settings.onfocusout = function(element)
$(element).valid();
;
所以我们禁用 onkeyup 和启用 onblur 的代码如下所示
var validator = $("form").data("validator");
if (validator)
validator.settings.onkeyup = false;
validator.settings.onfocusout = function(element)
$(element).valid();
;
【讨论】:
【参考方案4】:不知道如何将其设置为特定字段,但您可以尝试禁用 keyup 验证(适用于所有字段):
$.validator.setDefaults(
onkeyup: false
)
见
MVC 3 specifying validation trigger for Remote validation ASP.NET Remote Validation only on blur?【讨论】:
是的,我看到了。我喜欢大多数字段,而不是信用卡字段或远程验证字段(我宁愿等到 onblur 访问网站,而不是每次更改字符时)。可能只是我必须忍受的限制。我可能会像你上面提到的那样做全局 setDefaults... ...起初我使用 以确保文档和脚本已加载并准备好使用,但它不起作用。我不得不把它拉出来让它工作,例如: 最终只是禁用了“onkeyup”【参考方案5】:你也可以使用类似上面的东西,
$("form").validate(
onfocusout: false,
onkeyup: false
);
如果您有自定义规则,那么,
$("form").validate(
onfocusout: false,
onkeyup: false,
rules:
"name1":
required: true,
email: true,
maxlength: 100
,
"name2":
required: true,
number: true
);
jQuery 论坛中的This answer 对我帮助很大。
【讨论】:
【参考方案6】:您可以在 credit 字段的 onfocus 事件中将默认设置为关闭,然后在 onblur 中将其打开。看起来很hacky,但可以工作。
【讨论】:
以上是关于ASP.net MVC 3 jQuery 验证;禁用不显眼的 OnKeyUp?的主要内容,如果未能解决你的问题,请参考以下文章
对 ASP.Net MVC 验证进行故障排除?电子邮件验证电话不
自定义 asp.net mvc 3 jquery.validate.unobtrusive