我在jQuery中有一个相当直接的类切换。但是我不能为我的生活弄清楚为什么它没有按预期运作。
点击标签上的任意位置时,<p>
的类应切换。 按预期工作如果点击该复选框。但是,如果您点击其他地方,则不会进行切换
$('.xtrag p').on('click', function() {
$(this).toggleClass('row9');
});
&#13;
.xtrag {
margin: 40px;
}
p {
margin: 10px 0;
}
.row0 {
background: #eee;
padding: 4px 8px;
}
.row9 {
background: #ffd;
}
.rt {
float: right;
}
label {
display: inline-block;
width: 100%;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="xtrag">
<p class="row0">
<label for="xg1">
<span class="rt">
<input type="checkbox" name="extrag[]" value="1" id="xg1" />
</span>
Item 1
</label>
</p>
<p class="row0">
<label for="xg2">
<span class="rt">
<input type="checkbox" name="extrag[]" value="2" id="xg2" />
</span>
Item 2
</label>
</p>
<p class="row0">
<label for="xg3">
<span class="rt">
<input type="checkbox" name="extrag[]" value="3" id="xg3" />
</span>
Item 1
</label>
</p>
</div>
&#13;
我错过了什么?
如何在点击标签时切换<p>
的类?
我已尝试定位<label>
,然后使用.parent()
,但这并未改变任何行为。
答案 0 :(得分:1)
这是因为input
冒了click
个事件,你得到两个事件而不是一个。
阻止输入冒泡的另一种方法是 - 检查事件目标:
$('.xtrag p').on('click', function(e) {
if (typeof $(e.target).attr('type') !== 'undefined') {
$(this).toggleClass('row9');
}
});
&#13;
.xtrag {
margin: 40px;
}
p {
margin: 10px 0;
}
.row0 {
background: #eee;
padding: 4px 8px;
}
.row9 {
background: #ffd;
}
.rt {
float: right;
}
label {
display: inline-block;
width: 100%;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="xtrag">
<p class="row0">
<label for="xg1">
<span class="rt">
<input type="checkbox" name="extrag[]" value="1" id="xg1" />
</span>
Item 1
</label>
</p>
<p class="row0">
<label for="xg2">
<span class="rt">
<input type="checkbox" name="extrag[]" value="2" id="xg2" />
</span>
Item 2
</label>
</p>
<p class="row0">
<label for="xg3">
<span class="rt">
<input type="checkbox" name="extrag[]" value="3" id="xg3" />
</span>
Item 1
</label>
</p>
</div>
&#13;
答案 1 :(得分:0)
测试复选框的变化。该标签触发了另一次点击
$('.xtrag input').on('change', function() {
$(this).closest("p").toggleClass('row9');
});
&#13;
.xtrag {
margin: 40px;
}
p {
margin: 10px 0;
}
.row0 {
background: #eee;
padding: 4px 8px;
}
.row9 {
background: #ffd;
}
.rt {
float: right;
}
label {
display: inline-block;
width: 100%;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="xtrag">
<p class="row0">
<label for="xg1">
<span class="rt">
<input type="checkbox" name="extrag[]" value="1" id="xg1" />
</span>
Item 1
</label>
</p>
<p class="row0">
<label for="xg2">
<span class="rt">
<input type="checkbox" name="extrag[]" value="2" id="xg2" />
</span>
Item 2
</label>
</p>
<p class="row0">
<label for="xg3">
<span class="rt">
<input type="checkbox" name="extrag[]" value="3" id="xg3" />
</span>
Item 1
</label>
</p>
</div>
&#13;