我在ul
标记内有div
个标记。我已对mouseup
代码div
代码及click
代码申请了ul
个事件。
问题
每当我点击ul
代码时,都会触发mouseup
和click
个事件。
我想要的是,当我点击ul
代码时,只会触发click
个事件,如果我在mouseup
代码上执行了div
个事件,则仅{ {1}}事件应该触发。
我的代码:
HTML:
mouseup
JS:
<div class="m1">
Nitin Solanki
<ul>
<li>one</li>
<li>two</li>
</ul>
</div>
答案 0 :(得分:2)
您可以停止传播事件
$(document).on('mouseup', '.m1', function() {
alert('div mouseup ');
});
$(document).on('mouseup', '.m1 ul', function(e) {
e.stopPropagation()
});
$(document).on('click', 'ul li', function() {
alert("ul li- clicked");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="m1">
Nitin Solanki
<ul>
<li>one</li>
<li>two</li>
</ul>
</div>
答案 1 :(得分:1)
您可以使用jQuery&#39; is()来检查点击的元素是div还是列表:
$(document).on('mouseup', '.m1', function(event){
// Check if the clicked element is the div and not the list
if($(event.target).is('div'))
alert('div mouseup ');
});
$(document).on('click', 'ul li', function(){
alert("ul li- clicked ");
});
答案 2 :(得分:1)
原因是事件冒泡。您可以使用event.stopPropagation();
$(document).ready(function(){
$("ul li").click(function(event){
event.stopPropagation();
alert("The ul li element was clicked.");
});
$(".m1").click(function(){
alert("The div element was clicked.");
});
});
答案 3 :(得分:0)
这是一个奇怪的问题,作为&#34;点击&#34;的一部分。实际上是一个鼠标。 点击包含mousedown,然后是同一元素上的mouseup。
我认为你唯一可以做的就是在点击开始时存储,并为mouseup事件所依赖的变量添加一秒的超时。
喜欢这个。 (即使张贴这个也觉得很脏)。
var clickStarted = false;
$(document).on('click', 'ul li', function(){
alert("ul li- clicked");
clickStarted = false;
});
$(document).on('mousedown', 'ul li', function(){
clickStarted = true;
setTimeout(function(){ clickStarted = false; }, 1000);
});
$(document).on('mouseup', '.m1', function(){
if(!clickStarted)
alert('div mouseup ');
});