javascript - 同一个元素的两次点击事件
问题描述
我有一种情况,我有一个附加到元素的 onClick 属性的单击事件,以及一个在具有特定类的任何元素上触发的单击事件。元素的 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>
有谁知道如何解决这个问题,请记住我的真实代码比提供的示例大得多,并且有更多的类和按钮。
解决方案
你可以试试
- 将点击处理程序提取
.proceed
到命名函数 - 从
.proceed
点击处理程序调用该命名函数 - in
openPanel
,做函数需要做的任何事情,然后调用滚动处理程序,然后调用stopPropagation
事件
换句话说,不要让两个单击处理程序为您的单选按钮触发,而是让一个单击处理程序完成这两项任务然后停止传播。
推荐阅读
- sass - 单独导入 Vuetify 样式
- c++ - CMake 如何正确包含我自己的标题?
- laravel - 在 vue 组件上使用文本加扰器包
- mule - Mule 4 OuterJoin 并创建新数组
- c# - 如何使用 IBindingListView 过滤数据表中的行
- python - 关于使用 I/O 的问题
- java - 泛型迭代器
当集合对象的原始类型被传递给接受通用参数的方法时,行为会有所不同 - transcoding - AntMedia Server Entreprise:使用 webrtc 播放器的转码质量非常差
- r - 函数的 R 向量化
- php - .htaccess 重定向 (php) - 多个链接“层”需要重定向(类别分页)