我最近遇到了这种情况(这里简化)。只需用一个元素包装一个复选框并在其单击事件上应用 preventDefault() ,该复选框将变为不可选中。
看到这个小提琴,但这里有一个片段:
<div>
<input type="checkbox"/>
</div>
/* Wrapper could be any element (and any ancestor element will work) */
$('div').on('click', function(e){
e.preventDefault();
});
/* Uncomment to make the checkbox work again
$('input').on('click', function(e){
e.stopPropagation();
});
*/
该行为发生在 Chrome 和 FF 中,所以我认为这是故意的。
为什么已经在复选框本身上触发的单击事件不会导致复选框被切换?祖先上的preventDefault
似乎应该与子复选框的行为无关。似乎,要使复选框更改发生,单击事件需要自由地冒泡到文档根目录。
这里发生了什么?