我目前正在制作checkbox
附加label
。我使用for
属性链接复选框的点击。
我还有一个jQuery函数,onclick
用于复选框,标签容器为文本输入字段执行幻灯片切换。
当我单击该复选框时,只检测到一次单击,文本字段很好地向下滑动。但是,当我点击标签时,似乎发生了双击,因此文本字段向下滑动然后立即备份。
我的复选框上有toggle-checkbox
的ID,而我的标签上有for="toggle-checkbox"
,我怀疑它会以某种方式触发额外点击。
HTML:
<div class="cart-summary__coupon-code">
<div class="form-group js-coupon-code">
<input class="cart-summary__coupon-code__checkbox" type="checkbox" id="toggle-checkbox">
<label class="cart-summary__coupon-code__label form-group__label--block" for="toggle-checkbox">click me</label>
</div>
</div>
<div class="coupon-code">
<input type="text" />
</div>
JavaScript的:
jQuery('.js-coupon-code').click(function() {
$( ".coupon-code" ).slideToggle( "slow", function() {
});
});
CSS:
.coupon-code {
display: none;
}
我有created a codepen可以重现问题。
答案 0 :(得分:1)
您只需要preventDefault()
//toggle promo code input field
jQuery('.js-coupon-code').click(function(e) {
e.preventDefault();
$( ".coupon-code" ).slideToggle( "slow", function() {
});
});
答案 1 :(得分:1)
我建议将事件从click
更改为复选框change
。
jQuery('.cart-summary__coupon-code__checkbox').change(function() {
$( ".coupon-code" ).slideToggle( "slow", function() {
});
});
这是固定的codePen
答案 2 :(得分:1)
当您点击for="toggle-checkbox"
时在label
中使用label
时,它也会点击checkbox
。因此,父事件的click事件会触发两次事件冒泡。使用checkbox
的点击事件代替.js-coupon-code
。
jQuery('#toggle-checkbox').click(function() {
$(".coupon-code").slideToggle("slow", function() {});
});
&#13;
.coupon-code {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="cart-summary__coupon-code">
<div class="form-group js-coupon-code">
<input class="cart-summary__coupon-code__checkbox" type="checkbox" id="toggle-checkbox">
<label class="cart-summary__coupon-code__label form-group__label--block" for="toggle-checkbox">click me</label>
</div>
</div>
<div class="coupon-code">
<input type="text" />
</div>
&#13;
答案 3 :(得分:1)
只需绑定click
的{{1}}事件即可。它也适用于相应的input#toggle-checkbox
。
注意:为什么我这样说,在您的示例中,您只需尝试在label
和checkbox
之间点击,您的切换操作就会发生。
检查此示例:
label
jQuery('#toggle-checkbox').click(function() {
$(".coupon-code").slideToggle("slow", function() {});
});
.coupon-code {
display: none;
}