有一个带有<a href="#">
元素的<label>
。我想要阻止<a>
元素的默认行为(即导航),但它应该执行<label>
元素的默认行为(即选中其中的复选框)。
测试用例:http://jsfiddle.net/3M6WE/。单击foo
切换复选框。点击bar
不会导航,但也不会切换复选框。
如何使<a>
元素不导航但可以切换复选框?我想避免像手动切换复选框这样的hack。如果有的话,我正在寻找一个“部分”preventDefault
。
有一个带有<a href="#">
元素的<label>
。我想要阻止<a>
元素的默认行为(即导航),但它应该执行<label>
元素的默认行为(即选中其中的复选框)。
测试用例:http://jsfiddle.net/3M6WE/。单击foo
切换复选框。点击bar
不会导航,但也不会切换复选框。
如何使<a>
元素不导航但可以切换复选框?我想避免像手动切换复选框这样的hack。如果有的话,我正在寻找一个“部分”preventDefault
。
$("a").on("click", function(e) {
e.stopPropagation();
$(this).parent().click();
// do stuff...
e.preventDefault();
});
stopPropagation()
应该可以解决这个问题。 - Frédéric HamidistopPropagation
并不能防止这种情况。 - James Allardice我想你无法阻止这种情况的发生:
来自MDN:
嵌套的<label>元素中的单击事件
从Gecko 8.0(Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5)开始,冒泡单击事件最多触发一个<label>,并且合成的单击事件不能触发其他<label>。在Gecko中,单击事件仍将冒泡超过<label>,而在WebKit或Internet Explorer中,单击事件将停止在<label>处。 Gecko 8.0之前的行为(触发多个<label>)导致Firefox停止响应(请参见bug 646157)。
您觉得这个http://jsfiddle.net/3M6WE/10/怎么样?通过删除href='#'
,简化了您的问题。
<div>
,允许用户输入有关所选选项的更多详细信息。 - pimvdb<a>
元素不太一样。当然,我可以为<span>
设置样式,但如果有一个优雅的解决方案来解决preventDefault
问题,那将是更可取的。 - pimvdb