2012-08-05 11 views
5

私は寸法を入力するためのオプションがあるの形式があります。MVC 3控えめな検証 - 条件付きイネーブル/ディセーブル検証

  • 幅&高さ
  • 幅を
  • 身長

そして、私は3つのオプションのどれが選択されたかに応じて非表示/表示する2つのコンテナdivを持っています:

<div class="editor-field" id="width-container"> 
    @Html.EditorFor(model => model.Width) 
    @Html.ValidationMessageFor(model => model.Width) 
</div> 

<div class="editor-field" id="height-container"> 
    @Html.EditorFor(model => model.Height) 
    @Html.ValidationMessageFor(model => model.Height) 
</div> 

高さが選択されている場合、幅はフォームに表示されません。ユーザーが心を変えた場合に簡単に再配置できるように、幅入力フィールドで邪魔にならない検証を無効にするにはどうすればいいですか? data- *属性の削除はオプションではありません。私はこれを処理するためにCustomAttributeクラスを作成してうれしく思います。私はトラックをダウンして新しいバージョンを更新するように標準のjqueryファイルをハックする必要はありません。他のすべてがうまくいかない場合は、表示されていないときに0の値をフィールドに追加し、表示されたときにフィールドを削除するという通常のやり方を使用します。

EDIT:

幅が表示されていないとき、それは親のdivは表示のスタイルを持っているため、ユーザーには見えないだけで、入力タグのそれ自体が「隠し」フィールドではないことに注意してください。どれ

答えて

12

あなたは隠された要素を無視して、あなたの控えめな検証を処理していますjQueryのバリデータを設定することができます。

jQuery.validator.defaults.ignore = ":hidden"; 

// the line above is outside any $(document).ready(...) or similar 
$(document).ready(function(){ 
    ... 
}); 
... 
+0

私はさまざまなバージョンを見てきましたが、どれもうまく動作していないようです - 私は結論として、このルールは、それが親のdivである隠された入力タグではないので、このルールは、 "隠された"タグではなく、 "見えない"入力タグで動作するように設計されています。私はあなたのソリューションを試したし、動作しません。 – Rob

+0

':hidden'は、親が隠されているため、隠されている要素については絶対に真です。このフィドルでわかるように、私のソリューションは基本的なケースでうまくいきます:http://jsfiddle.net/7PmEz/5/。だから、あなたが持っているものとデルタがどこにあるのかを見つけようとしましょう。欠けているものがなければなりません。生成されたhtmlをjsfiddleに入れて、それをテストするのに使用するのと同じjavascriptを使用してみてください。それがうまくいく場合は、全体のビューコードを投稿してみてください。 – Milimetric

+0

MS MVC3フレームワークを使用して生成されているため、実際にコードをjsfiddleに入れることはできません。実際には有効な比較を行っていません。 – Rob

1

だから、(私は検索にハードGoogleで再び狩り行ってきました、これは私の質問への答えであると思いませんなかったもののために"隠し" フィールド)に関連する:

https://stackoverflow.com/a/7673985/491950

例えば

$("#height-container input[type='text']").attr("disabled", "disabled"); 

ご回答ありがとうございます。

+0

それでは入力をどのように入力しますか? – stuartdotnet

+0

ユーザーに表示されていない場合にのみ無効になります - 私の答えの上にあるSOのリンクをご覧ください – Rob

関連する問題