(ユーザーが制御する)動的エントリを持つ製品レコードを作成するためのフォームがあります(つまり、製品にはN個のオプション(さまざまな色、さまざまな仕上げなど、価格も異なる場合があります)を含めることができます)。ユーザーは一連のフィールドを追加しますもちろん、ほとんどの製品には 1 つのバージョンしかありません (したがって、オプションは 1 つだけです)。したがって、この場合、オプション名を指定する必要はなく、価格のみを指定する必要があります。したがって、オプション名フィールドは、次の場合にのみ検証されます。フォームに複数のオプション価格フィールドがあります。
$('.iprice').each(function() {
$(this).rules('add', {
required: true,
number: true,
*/ messages : { required:'enter price', number:'enter only price' } */
});
});
$('.iname').each(function() {
$(this).rules('add', {
required: function(){
if ($('[name="attr[2][price]"]').length) {
return true;
} else {
return false;
}
},
/* messages: function(){
if ($('[name="attr[2][price]"]').length) {
return 'option name?';
}
} */
});
});
上記のように、検証は正常に機能します。(こちらのjsfiddleを参照してください)。ただし、検証には、カスタム メッセージを提供するコメント アウトされたセクションが 2 つあります。これらが含まれている場合、参照されたフィールドのいずれかに値があると、送信ボタンはエラーを返します。
"{"error": "シェル フォームが検証されません{'html_initial_name': u'initial-js_lib', ..."
私が見る限り、構文は正しく、メソッドは正しいものです。誰が私がどこで間違っているかを見ることができますか?
(要素ごとに data-msg-required="??xx??" 属性を作成することで、他の方法で問題を回避できることはわかっていますが、それは少し洗練されておらず、長ったらしいです。)
アイデアはありますか?
オプションのセットが 1 つだけのフォームを示す別の jsfiddleを次に示します。価格フィールドのカスタム メッセージは有効になっていますが、名前フィールドのカスタム メッセージのコメントが解除されていると、送信時に検証がクラッシュします。