正如我们所知,从DOM事件处理函数返回false
将停止事件的传播。但是我最近发现,不同元素的行为在这个事件上有所不同。例如,考虑以下因素:输入类型之间的DOM/jQuery事件传播差异
<div id="container">
<input type="checkbox" name="foo" value="1" /> Check me!
<br />
<select>
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<br />
<input type="text" size="30" />
</div>
周围的容器都返回false click处理:
$('#container').click(function(e) {
$('#clicks').append('<span>clicked</span>');
return false;
});
内div
,我还可以点击文本框,输入文字,并可以仍然点击下拉菜单来更改其值。但点击复选框什么也不做(实际上,这不是真的 - 它检查框,触发处理程序,然后取消选中它)。 jsfiddle here:http://jsfiddle.net/4ncaq/
这种行为在浏览器中是一致的,所以我假定它是通过设计的。但是,这里工作的规则究竟是什么?我怎样才能知道在这种情况下其他类型的元素可能会如何表现?
这并不能解释他为什么不能勾选复选框,但他可以放下组合。如果点击处理程序连接到包含复选框的div,那么为什么它会影响复选框。当div点击处理程序返回false时,事件确实已经过去了复选框吗? – Archer 2012-03-08 15:06:54
@archer我编辑了答案来解释默认操作。 – 2012-03-08 15:25:41
太棒了 - 谢谢:) – Archer 2012-03-08 15:27:04