0

我正在为占位符做一个 javascript 解决方法,这样对于不识别它的浏览器,我使用 input/textarea 值显示占位符。但这弄乱了我在 ASP.net MVC 应用程序上的客户端验证。

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

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

4

1 回答 1

1

啊哈!我应该更好地阅读第二个链接。有人建议更改 jquery.validate.js 以检查元素的占位符属性。但我认为这是一个糟糕的解决方案,因为它可能会被 jquery.validate.js 的升级所覆盖。

但是,我发现我可以在我的脚本中覆盖验证器方法。所以我写了这个似乎有效。基本上,我复制了该方法,但添加了如下所示的行。

在我自己的验证 js 中,我添加了替换检查以查看元素是否具有占位符属性以及它是否等于占位符文本:

$.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'));
        }
    }, '');

它似乎工作。并运行脚本调试,我可以看到它替换了“必需”。

于 2013-10-24T06:26:52.647 回答