无论是否已选中,如何识别父复选框元素的值?
我正在使用带有复选框的 jQuery 嵌套菜单来创建一系列嵌套的伪选择元素。如果用户在嵌套菜单中选择了一个复选框,我想在父菜单中显示他们的选择以及相关复选框的值(即,如果用户选择name="bother_shoulders" value="Too_small"
,则显示的文本应该是 'Shoulders' (父值) +' 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>
更新 -
它几乎可以工作了:-) 我已经获得了两个非常棒的解决方案(感谢@Madbreaks 和@Samuel Liew),用于在检查父元素或子元素时识别正确的值,但我仍然遇到最终问题功能的一部分 - 取消选中项目时删除这些值。
@Madbreaks 的解决方案为父元素和<li>
子<ul>
元素(父子元素)添加了类class="dislike"
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/