2013-03-18 210 views
16

jquery.validateを使用しているフォームがあります。私は当初場合JQuery.Validateメッセージで動的ルールを追加する

$("#formName").append(...); 

$("#newInputName").rules("add", { 
    required: true, 
    messages: { 
    required: "Enter something else" 
    } 
}); 

...

$("#formName").validate({ 
    rules: { 
    myExistingInput: { 
     required: true 
    } 
    }, 
    messages: { 
    myExistingInput: { 
     required: "Enter something" 
    } 
    }, 
    ignore: null, // include hidden fields (see below) 
    submitHandler: function(form) { 
    // do stuff 
    }, 
    invalidHandler: function(event, validator) { 
    // do stuff (some of the fields may have been hidden by a collapsible panel 
    // if there is an error on one of those fields, expand the panel so the error 
    // becomes visible) 
    } 
}); 

その後、私は動的にフォームにフィールドを追加し、あまりにもそれらのフィールドのためのルールを追加...ルールとカスタムメッセージのセットで検証呼び出します私は、ブラウザで

Exception occured when checking element newInputName, check the 'messages' method.TypeError: Unable to get property 'call' of undefined or null reference

デバッグ、私はエラーが「チェック」機能の中からスローされて見て、ことができます...私はjquery.validate内からエラーを取得し、フォームを送信」メソッド "変数「メッセージ」に設定されています。

私はコールからのルールにメッセージを削除する場合(、「追加」...

$("#newInputName").rules("add", { 
    required: true 
}); 

期待どおりに動作しますが、明らかに私は今はカスタムエラーメッセージを持っていません。

私が持っていますSO私の構文が正しいことを示すには、ここで多くの例を見て任意の提案は

ところで:jQueryの検証プラグイン - v1.11.0は - 2013年2月4日

+0

FYI:jquery.mobileと組み合わせて使用​​しています。 $( "#formName")。validate({...})は$(document).on( "pageinit"、...)から呼び出されますが、動的フィールドはボタンのクリックで追加されます。それが重要かどうかわからない? –

+0

OPを編集してその情報を追加してください。 – Sparky

+0

@ Sparky:問題は#670で修正されました。私は新しいバージョンが公式にリリースされるまで、その修正を私のコピーに複製しました。また、問題#674で修正されましたが、どのバージョンでリリースするのか分かりません。 #674で識別されたバージョン10と11の間のnormalizeRulesのコードが欠落しています(この欠落しているコードを復元すると問題は解決します)が、#674で提案されている修正はコードを復元するのではなく、#670とも異なります。 –

答えて

20

あなたのコードがあると思われます。?あなたがそれを投稿したときにエラーなしで作業しています。準備DOMと

DEMO:PageInit &のjQuery Mobileとhttp://jsfiddle.net/UZTnE/

DEMO:http://jsfiddle.net/xJ3E2/

$(document).on("pageinit", function() { 

    $('#myform').validate({ // initialize the plugin 
     rules: { 
      field1: { 
       required: true 
      } 
     }, 
     messages: { 
      field1: { 
       required: "Enter something" 
      } 
     } 
    }); 

    $('[name*="field"]').each(function() { 
     $(this).rules('add', { 
      required: true, 
      messages: { 
       required: "Enter something else" 
      } 
     }); 
    }); 

}); 

HTML

<form id="myform"> 
    <input type="text" name="field1" /> 
    <input type="text" name="field2" /> 
    <input type="submit" /> 
</form> 

ところでjQuery Validate - Enable validation for hidden fields

+0

ignore上のポインタありがとうございます:[];しかし元の問題についてはまだ分かりません。私はasp.netのcdn上のバージョンで持っているjquery.validate.minを比較しており、それらは同じです。私は明日これを調べ、あなたに戻ってきます。 –

+2

@MartinRobins、ブラウザで "http://jsfiddle.net/xJ3E2/show/"を開き、 "ソースを表示"してください。あなたのコードと比較してください。 – Sparky

+0

自分のコードを反映するように更新しました。 DOMバージョン(http://jsfiddle.net/UZTnE/2/)はもう動作しません。 JQMのバージョンをまったく実行できません。しかし別の問題。 –

4

$(document).ready(function(){ 
 
    $("#controlId").rules("add", { 
 
    required : true, 
 
    messages : { required : 'field is required.' } 
 
    }); 
 
});

この...

ignore: null, // include hidden fields 

が...

ignore: [], // include hidden fields 

を参照してくださいする必要があります

0

この古い問題の答えとして、私はルールオブジェクトの中にメサージスを得るためにこれが好きです。あなたはルールを追加した後

あなたは、このようなメッセージを追加することができます。

var inputRules = $('input').rules(); 
inputRules.messages = {required: 'your message'}; 

enter image description here

幸運を!

関連する問題