テキストエリアの内容に基づいてjqueryを使用してコンテンツを隠したり表示したりするための試行錯誤の後、に近いのスクリプトが完成しました。私はMVC 5でこれをやっていますが、このジレンマには何の影響もないと思います。子どものコンテンツに基づいてdivを非表示または表示
私は編集ページを持っています。このページには、多くのオプションのテキスト領域があります。これらは空でもテキストでもかまいません。私がしたいのは、テキストが含まれていない場合、デフォルトでそれらを隠すことです。それらはグループ化されており、それらの上の説明テキストをクリックするとトグル可能です。
これは私がそれらを一つの領域の表示、グループ化されてきた方法です:即時テキスト領域、Q1p1であれば
$(document).ready(function() {
if (!$.trim($(".optionalArea textarea").val()).length < 1) {
$(".optionalArea textarea").parents(".hiddenContainer").show();
}
});
さて、これはうまく動作します:
<div class="togglerDesc">
<p class="pointerToggler"><strong>XXX description</strong></p>
<div class="hiddenContainer">
<div class="optionalArea">
<div class="form-group">
@Html.LabelFor(model => model.Q1p1, htmlAttributes: new { @class = "control-label col-md-1" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Q1p1, new { @class = "form-control", @rows = "2", @style = "width:90%;max-width:100%;" })
@Html.ValidationMessageFor(model => model.Q1p1, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Q1p2, htmlAttributes: new { @class = "control-label col-md-1" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Q1p2, new { @class = "form-control", @rows = "2", @style = "width:90%;max-width:100%;" })
@Html.ValidationMessageFor(model => model.Q1p2, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Q1p3, htmlAttributes: new { @class = "control-label col-md-1" })
<div class="col-md-10">
@Html.TextAreaFor(model => model.Q1p3, new { @class = "form-control", @rows = "2", @style = "width:90%;max-width:100%;" })
@Html.ValidationMessageFor(model => model.Q1p3, "", new { @class = "text-danger" })
</div>
</div>
</div>
</div>
</div>
を私は持っているスクリプトがあります私の例はそこにテキストを持っています。しかし、空であれば、他の2つのテキストエリアにテキストが含まれていても、divは表示されません。ここで私の問題は、スクリプトがすべてのdivを考慮せず、最初のスクリプトのみをチェックするということです。 .optionalArea内のすべてのテキスト領域が考慮されるように、どのように変更できますか?
あなたは、このすべてのサーバー行うことができませんでしたあなたのビューモデルのいくつかのIsXSectionViewableブール値プロパティを設定し、IsXSectionViewableの場合は、あなたのカミソリのその要素にdisplay:noneを設定します。 – Fran
@Fran私は剃刀を使用することさえ考えていなかった、私は既にサイトの他の部分で非常に似たようなことをしていたので、かなり新人だがjqueryルートを下ると思った。 jqueryを使用して適切な回答が2日以内に上手くいかない場合は、私はあなたの提案に従います。どうもありがとう! – Wubbler
私はサーバー側のアプローチのほうが2番目です。チェックボックスのクリックに基づいてdivを表示するのは簡単です。必要なのは、最初にチェックボックスの初期状態を設定するロジックを使用して、divを最初に表示または非表示にすることだけです。 –