選択されているかどうかに関係なく、親チェックボックス要素の値を特定するにはどうすればよいですか?
jQuery の Nested Menu とチェックボックスを使用して、一連のネストされた疑似 Select 要素を作成しています。ユーザーがネストされたメニューでチェックボックスを選択した場合、親メニューの関連するチェックボックスの値とともに選択を表示したい (つまり、ユーザーが を選択name="bother_shoulders" value="Too_small"
した場合、表示されるテキストは「肩」(親の値) + 'である必要があります) Too_small' (選択した値) )。
以下の関数の最初の行は、選択された要素の値を識別しますが、選択されていない親要素の値を識別する同様の関数を作成する方法がわかりません。
JS
$(".dropdown_container ul li a").click(function () {
var text = $(this).find("input").val();
var currentHtml = $(".dropdown_box span").html();
$(".dropdown_box span").html(currentHtml.replace(currentHtml, ''));
$(".dropdown_box span").append(text);
});
HTML
<div class="dropdown_box"><span>1st Priority</span></div>
<div class="dropdown_container">
<ul>
<li><a href="#"><label><input type="checkbox" name="first_dislike" value="Shoulders" />Shoulders</label></a>
<ul>
<li><a href="#"><label><input type="checkbox" name="bother_shoulders" value="Too_small" class="goal-increase"/>Too Small</label></a></li>
<li><a href="#"><label><input type="checkbox" name="bother_shoulders" value="Too_big" class="goal-decrease"/>Too Big</label></a></li>
</ul>
</li>
<li><a href="#"><label><input type="checkbox" name="first_dislike" value="Waist" />Waist</label></a>
<ul>
<li><a href="#"><label><input type="checkbox" name="bother_waist" value="Too_defined" class="goal-increase"/>Too Defined</label></a></li>
<li><a href="#"><label><input type="checkbox" name="bother_waist" value="Not_defined" class="goal-decrease"/>Not Defined</label></a></li>
</ul>
</li>
<!-- More List Items with Nested Menu Items --!>
</ul>
</div>
アップデート -
ほとんど機能しています:-)親要素または子要素のいずれかがチェックされたときに適切な値を識別するための2つの非常に優れたソリューション(@Madbreaksと@Samuel Liewのおかげ)を取得しましたが、最終的にはまだ問題があります関数の一部 - アイテムがチェックされていないときにこれらの値を削除します。
@Madbreaks のソリューションは、クラスを親要素<li>
と子<ul>
要素(parentclass="dislike"
と child class="reason"
)に追加しました
$(".dropdown_container ul li.dislike a").click(function () {
var dislike = $(this).find("input").val();
var dislike_formatted = dislike.replace(/_/g, " ");
var currentHtml = $(".dropdown_box span").html();
$(".dropdown_box span").html(currentHtml.replace(currentHtml, ''));
$(".dropdown_box span").append(dislike_formatted);
});
$("ul.reason a").click(function () {
var reason = $(this).find("input").val();
var dislike = $(this).parents('li.dislike').find("input").val();
var reason_formatted = reason.replace(/_/g, " ");
var dislike_formatted = dislike.replace(/_/g, " ");
var currentHtml = $(".dropdown_box span").html();
$(".dropdown_box span").html(currentHtml.replace(currentHtml, ''));
$(".dropdown_box span").append(dislike_formatted + ': ' + reason_formatted);
});
動作するフィドルがここに投稿されています: jsfiddle.net/chayacooper/Ejqp9
@Samuel Liew のソリューションは次のように置き換えられvar currentHtml = $(".dropdown_box span").html();
ます。
var currentHtml = '';
var $parent = $(this).parent().parents('li');
if($parent[0]) {
var text2 = $parent.find("input").val();
currentHtml = text2 + ': ' + currentHtml;
}
動作するフィドルがここに投稿されています: jsfiddle.net/samliew/H3n6m/11/