あはは!その2番目のリンクをもっとよく読むべきでした。要素のプレースホルダー属性をチェックするように 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'));
}
}, '');
うまくいくようです。スクリプトのデバッグを実行すると、「必須」が置き換えられていることがわかります。