我遇到的情况是,我将click事件附加到元素的onClick属性上,并且还有一个click事件会在具有特定类的任何元素上触发。元素的onClick事件导致页面上的面板关闭。该类的onClick事件使页面滚动到页面下方的元素。
问题在于两者似乎同时触发,导致页面滚动到目标元素之外。这是一个代码示例:
$(document).ready(function() {
$('.proceed').on("click", function() {
$('html, body').animate({
scrollTop: $(this).closest('.item-section').next().offset().top
}, 2000);
})
});
function openPanel() {
var rb1 = $("#radioButton1").is(':checked');
alert("Clicked");
$('#containerBox1').toggle(rb1);
}
.item-section {
height: 500px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="">
<div class="item-section">
<p>Choose a food</p>
<input type="radio" id="radioButton1" name="food" value="pizza" onclick="openPanel()">Pizza<br>
<div id="containerBox1" style="display: none;">
<p>Choose a topping</p>
<input type="radio" name="topping" value="pepperoni">Pepperoni<br>
<input type="radio" name="topping" value="vegetarian">Vegetarian<br>
<button class="proceed">Proceed to next section</button>
</div>
<input type="radio" name="food" value="burger" class="proceed">Burger<br>
<input type="radio" name="food" value="fish" class="proceed">Fish
</div>
<div class="item-section">
<p>Drink selection would be here</p>
</div>
</form>
有人记住我的实际代码比提供的示例大得多,并且具有更多的类和按钮吗?
答案 0 :(得分:0)
您可以尝试
.proceed
点击处理程序提取到命名函数.proceed
点击处理程序中调用该命名函数openPanel
中,执行函数需要执行的所有操作,然后调用滚动处理程序,然后在事件上调用stopPropagation
换句话说,不允许两个单击处理程序为您的单选按钮触发,但要有一个单击处理程序来完成两个任务,然后停止传播。
答案 1 :(得分:0)
您不需要两个onclick
事件。只需处理.proceed
的那个,然后检查是否检查了rb1。
$(document).ready(function() {
$('.proceed').on("click", function() {
var rb1 = $("#radioButton1").is(':checked');
if( rb1 ) {
alert("Clicked");
$('#containerBox1').toggle(rb1);
}
$('html, body').animate({
scrollTop: $(this).closest('.item-section').next().offset().top
}, 2000);
})
});