【发布时间】:2014-07-22 00:51:35
【问题描述】:
我有一个具有相当大的点击区域的锚点,其中还有一个选择下拉菜单,当单击选择时不应激活链接。我知道这可能不是“规范”,但我需要锚提供的功能(即 cmd-click 在新的浏览器选项卡中打开)并且不知道任何其他方式。
这是我所拥有的大致轮廓:
<a id="anchor" href="http://google.com" onclick="anchor(event)">
<div id="div">
<select id="select" onclick="select(event)">
<option>Option A</option>
<option>Option B</option>
<option>Option C</option>
</select>
</div>
</a>
这是一个通常显示我正在尝试做的事情的小提琴:
但是,这不是一个很好的测试方法,因为 fiddle 不允许您跟踪链接,因此您永远不会真正知道发生了什么。我建议将此独立粘贴到浏览器中:
问题是,每当我单击选择时,它都会跟随锚点。我已经尝试在(现在是裸露的)函数中使用各种 stopPropagation 和 preventDefault ,但我什么也做不了。显然,当您不单击下拉菜单时,我仍然希望锚点起作用。
更糟糕的是,我可以让它主要在 chrome 中工作,但它在 Firefox 中不起作用(还没有真正测试过 IE 或其他)。似乎在第一次单击时会显示选择,但随后我使用的 preventDefault() 会破坏其他所有内容。
任何建议,即使与我的建议有很大不同但实现了相同的目标,我们将不胜感激。谢谢!
【问题讨论】:
-
你能给内部元素一个
href="#" -
@DavidCorbin:你为什么要给非
<a>元素一个href属性?它在<option>或<select>或<div>元素上没有任何意义。 -
“div”会有预定义的区域吗?您可以更改布局并使用两个兄弟元素 a(作为块)和 div 本身,使第一个 position:absolute 具有相同的大小
-
问题是糟糕和无效的设计,而不是如何防止冒泡
标签: javascript html css dom