我正在为占位符执行javascript解决方法,这样对于无法识别它的broswers,我使用input / textarea值显示占位符。但这会在ASP.net MVC应用程序上混淆我的客户端验证。
我看到这个SO article这不是我想要实现的东西:(1)我有一些使用占位符的字段,(2)对于我的占位符,我使用ModelMetaDataprovider返回DisplayAttribute或DescriptionAttribute或字段的名称(拆分为单词并正确进行大小写转换)。
现在,我还阅读this,建议使用自定义验证属性。但是,我认为这是一种矫枉过正,因为我想要的只是一个不同的客户端验证。
答案 0 :(得分:1)
啊哈!我应该更好地阅读second link。一个人建议更改jquery.validate.js以检查元素的占位符属性。但我认为这是一个糟糕的解决方案,因为这可能会被jquery.validate.js的升级所覆盖。
但是,我发现我可以在我们的脚本中覆盖验证器方法。所以我写了这个似乎有效。基本上,我复制了方法,但添加了下面指出的行。
在我自己的验证js中,我添加了check replace以查看该元素是否具有占位符属性,以及它是否等于占位符文本:
$.validator.addMethod(
'required',
function(value, element, param) {
// check if dependency is met
if ( !this.depend(param, element) )
return "dependency-mismatch";
switch( element.nodeName.toLowerCase() ) {
case 'select':
// could be an array for select-multiple or a string, both are fine this way
var val = $(element).val();
return val && val.length > 0;
case 'input':
if ( this.checkable(element) )
return this.getLength(value, element) > 0;
default:
// REPLACED THIS:
//return $.trim(value).length > 0;
// WITH THIS:
return ($.trim(value).length > 0) && (value != element.getAttribute('placeholder'));
}
}, '');
似乎有效。并运行脚本调试,我可以看到它取代了'required'。