使用占位符解决方法处理客户端验证的更好方法

时间:2013-10-24 06:14:02

标签: jquery asp.net-mvc validation client-side-validation

我正在为占位符执行javascript解决方法,这样对于无法识别它的broswers,我使用input / textarea值显示占位符。但这会在ASP.net MVC应用程序上混淆我的客户端验证。

我看到这个SO article这不是我想要实现的东西:(1)我有一些使用占位符的字段,(2)对于我的占位符,我使用ModelMetaDataprovider返回DisplayAttribute或DescriptionAttribute或字段的名称(拆分为单词并正确进行大小写转换)。

现在,我还阅读this,建议使用自定义验证属性。但是,我认为这是一种矫枉过正,因为我想要的只是一个不同的客户端验证。

1 个答案:

答案 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'。