5

次の寸法を入力するオプションがあるフォームがあります。

  • 幅高さ
  • 身長

そして、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>

高さが選択されている場合、幅はフォームに表示されません。ユーザーが気が変わった場合、つまりデータを削除した場合に簡単に復元できるように、幅入力フィールドの控えめな検証を無効にするにはどうすればよいですか?属性はオプションではありません。これを処理するために CustomAttribute クラスを作成できてうれしいですが、新しいバージョンへの更新が後で頭痛の種になるため、これを機能させるために標準の jquery ファイルをハックする必要はありません。他のすべてが失敗した場合は、フィールドが表示されていないときにフィールドに値 0 を追加し、表示されているときにフィールドを削除するという通常のトリックを使用します。

編集:

Width が表示されない場合、それ自体は「隠し」フィールドではなく、親 div のスタイルが display:none であるため、ユーザーには表示されない単なる入力タグであることに注意してください。

4

2 に答える 2

13

目立たない検証を処理する jQuery バリデーターを設定して、隠し要素を無視することができます。

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

// the line above is outside any $(document).ready(...) or similar
$(document).ready(function(){
    ...
});
...
于 2012-08-05T12:43:20.160 に答える
1

これが私の質問に対する答えのようです (「非表示」フィールドに関係のないものを検索するのに苦労して、Google で再び狩りをしました):

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

例えば

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

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

于 2012-08-05T13:10:12.227 に答える