0

次のようなプレースホルダー値を持つ入力があります。

<input type="text" name="mydate" value="yyyy-mm-dd">

値が "yyyy-mm-dd" でない場合にのみルールを実行するように変更するにはどうすればよいですか?

$(document).ready(function(){
   $("form.myclasstovalidate").validate({
       rules: {    
    mydate: {
            date: true
               }
       }
 });
4

3 に答える 3

0

マークアップでプレースホルダー属性を使用すると、実際の値ではなく、実際のプレースホルダーであり、正常に機能するため、問題が解決します。あなたのJavaScriptには構文エラーもあります。私は私の答えでそれらを修正しました。

<input type="text" name="mydate" placeholder="yyyy-mm-dd" />

$(document).ready(function(){
   $("form.myclasstovalidate").validate({
       rules: {    
    mydate: {
            date: true
               }
       }
    });
 });
于 2013-02-28T19:38:39.570 に答える
0

何らかの理由で属性を使用したくない場合は、プラグインのメソッドplaceholderを使用してカスタム ルールを作成できます。これは、OP が別のアプローチを採用した場合でも、新しいルールを作成する方法に関する良い教訓でもあります。addMethod()

date値が でない場合にのみ検証を行いたいとおっしゃっていたので"yyyy-mm-dd"、入力された値を要素の に対してチェックする条件を追加しdefaultValue、デフォルトのdateメソッド/ルール コードを内部に配置しました。

jQuery.validator.addMethod("mydaterule", function (value, element) {
    if (value != element.defaultValue) {
        return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
    } else {
        return true;
    }
}, 'please enter a valid date');

必要に応じてさらに微調整できます。

次のように新しいルールを適用します。

$('#myform').validate({
    rules: {
        mydate: {
            mydaterule: true
        }
    }
});

デモ: http://jsfiddle.net/Acew7/

重要な注意:は、既定の規則"yyyy-mm-dd"を満たす正しい形式ではありません。dateただし、"yyyy/mm/dd"動作します。

例えば

  • 2013-02-28 はdate検証に失敗します
  • 2013/02/28dateバリデーション合格
于 2013-02-28T20:07:05.910 に答える
0

基本的に、プレースホルダーのテキストが、プレースホルダーの機能を「模倣」する入力ボックスの値に過ぎないという問題があります。おそらくクリックで削除し、ユーザーが入力ボックスの内容を空にした場合は元に戻し、もちろんプレースホルダーを実際の値として検証しないように検証調整を行います...

上記のすべての代わりに、html5 のプレースホルダー属性を使用できます ;)

于 2013-02-28T19:16:35.770 に答える