2011-10-06 8 views
6

ここにユースケースがあります:MVC3控えめな検証:要素のグループから検証を削除/再接続する方法は?

私は、ユーザーが目に見える入力の1つで特定の選択をする場合にのみ表示されるフィールドのグループを持つこの長いフォームを持っています。私がjQuery.validator.unobtrusive.parse( '。extra-data')と思った主題に関するBrad Wilsonの記事を読む.extra-dataは隠れたdivのクラスです。最初の解析が完了した時点でデータが既に存在していたので運はありません。

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary 
    if (!$.isEmptyObject(currentRules)) { 
     removedRules[$(item).attr("name")] = currentRules; 
    } 
}); 

と、これは、それらを再アタッチする:

だから最後に、私はルールを削除するには、この思い付いた

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    if (!$.isEmptyObject(removedRules[$(item).attr('name')])) { 
     $(item).rules('add', removedRules[$(item).attr('name')]); 
    } 
}); 

問題がある、それは私が「とちょっとハック感じています文字通り各フィールドを通過し、それらの検証ルールを削除して再接続します。私の質問です:より簡単な方法はありませんか?パフォーマンスも問題であり、そのような巨大なフォームの1つで、クリックと検証実行の間の遅延を感じることができます。

+0

http://stackoverflow.com/questions/5104288/adding-validation-with-mvc-3-jquery-validator-in-execution-time –

答えて

23

ルールを削除して再接続しないでください。ただdisableまたはenableの入力。無効になっているフィールドは検証に関与せず、サーバーに送信されません。

//disable inputs. No validation will occur on these 
$('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled'); 

//enable inputs. Validation is re-enabled 
$('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled'); 
+0

私は間違いなく私よりはるかにあなたのソリューション、感謝の男のような。 – JoseMarmolejos

関連する問題