2013-06-27 115 views
0

我有一个<li>内的复选框作为菜单的一部分。包装物品有一个点击处理器,用于切换复选框(与整个菜单的感觉一致)。问题是如果用户直接点击复选框,它将执行其默认切换,然后外部处理程序也切换它。我怎样才能防止这个双切换?与onclick切换复选框切换双切换(如何阻止内部切换)

<li onclick='/*toggle checkbox*/'><input type='checkbox'/>...</li> 

我试过disabled但改变渲染,这是我不想要的。

我使用jQuery的情况下,有一个功能有帮助。

+2

_ “包裹项目具有切换的复选框,点击处理程序” _ - 停止试图重新与JS是已经可以在HTML功能.. 。并使用'label'元素! – CBroe

+0

还有一些叫做event.cancelBubble的东西。阅读[这里](https://developer.mozilla.org/en-US/docs/Web/API/event.cancelBubble)。这可能会帮助你。 – mohkhan

+0

有没有jsfiddle? –

回答

1

可以使用.stopPropagation()功能,以防止传播了DOM树点击jQuery的方法。

Here's an example

$(document).ready(function() { 
    $("input[type=checkbox]").click(function (evt) { 
     evt.stopPropagation(); 
     $("#thetext").html("checbox clicked"); 
    }); 

    $("li").click(function() { 
     $("#thetext").html("li clicked"); 
    }); 
}); 

HTML

<ul> 
    <li> 
     <input type='checkbox' /> 
    </li> 
</ul> 
<div id="thetext">hm</div>