我意识到 Firefox 处理标签上的点击事件<select>
与 Webkit/IE 不同,我无法弄清楚为什么或如何解决这种差异。
具体而言,Webkit的/ IE将每个点击事件上<select>
作为组合两个点击“选择”,和下拉的一个的点击<option>
,在下面曲线图所示:
第一次点击:
第二次点击:
在 Webkit/IE 中,只有在两次点击都完成后才会触发click事件。
但是在Firefox中,<select>
标签的第一次点击被视为一个点击事件,第二次点击选择<option>
被视为另一个点击事件。因此,2个 点击事件已经在Firefox解雇比较一个WebKit中/ IE进行同样的操作。
现在在代码示例中演示它,假设我们有:(JSfiddle 链接)
<select id="sel">
<option>one</option>
<option>two</option>
<option>three</option>
</select>
<script>
function select() {
$("#sel").one("click", function(event) {
console.log('mouse down!');
$("#sel").one('click', function() {
console.log('mouse down again!');
$("#sel").off();
select();
});
});
}
$(document).ready(function() {
select();
});
</script>
在 Webkit/IE 中,执行上图中显示的一组操作(第一次)将给出输出:
mouse down!
在 Firefox 中,它会给出:
mouse down!
mouse down again!
为什么会这样,我该如何解决?
编辑:我尝试使用没有 jQuery 的纯 JavaScript,结果保持不变。
编辑 2:多一点上下文,我最初回答了这个问题:onclick on option 标签不适用于 IE 和 chrome,并为我的回答赢得了赏金。但是,正如操作员后来指出的那样,我的解决方案在 Firefox 上不起作用。我决定深入挖掘以解决这个问题,因此提出了这个问题,我奖励了我从该解决方案中获得的 50 赏金。本质上,问题在于创建一个选择菜单,该菜单将在做出选择时触发一个事件,即使它是相同的。事实证明,这比预期的要困难,如果可能的话,由于不同的浏览器实现。
编辑 3:我完全知道onchange
,但这里的问题不是关于onchange
你是否仔细阅读。我需要让每个选择触发一个事件,即使它们是相同的选择(这不会触发onchange
.