如何部分防止默认()?

时间:2012-07-06 14:10:32

标签: javascript jquery google-chrome preventdefault

内部有<label><a href="#">元素。我想阻止<a>元素的默认行为(即导航),但应该执行<label>元素的默认行为(即检查其中的复选框) )。

测试用例:http://jsfiddle.net/3M6WE/。点击foo切换复选框。点击bar不会导航,但也不会切换复选框。

如何让<a>元素导航,但 它切换复选框?我想避免像手动切换复选框一样的黑客攻击。我正在寻找“部分”preventDefault,如果有的话。

3 个答案:

答案 0 :(得分:3)

您可以触发父元素(标签)的点击:

http://jsfiddle.net/3M6WE/11/

$("a").on("click", function(e) {
    e.stopPropagation();
    $(this).parent().click();
    // do stuff...
    e.preventDefault();
});

然后做一些魔术,最后调用preventDefault();

答案 1 :(得分:2)

我想你无法阻止这一点:

来自MDN

  

单击嵌套元素中的事件

     

从Gecko 8.0开始(Firefox 8.0 / Thunderbird 8.0 / SeaMonkey   2.5),冒泡点击事件最多触发一个<label>,合成点击事件不能触发额外的<label>。在Gecko,a   在WebKit或中,点击事件仍会冒出<label>   Internet Explorer点击事件将在<label>处停止。该   导致Gecko 8.0之前的行为(触发多个<label>)   Firefox停止响应(请参阅bug 646157)。

答案 2 :(得分:2)

http://jsfiddle.net/3M6WE/10/怎么样?删除href='#'

,简化您的问题