Javascript 为什么select on input的值会触发chromium中的两个事件?

Javascript 为什么select on input的值会触发chromium中的两个事件?,javascript,html,chromium,Javascript,Html,Chromium,我正在用铬43测试这个 当我按下选择按钮时,以下代码仅触发一个事件: <script> window.addEventListener('select', function(ev) { console.log(ev, ev.timeStamp); }); </script> <input type="text"><button onclick="document.querySelector('input').select(

我正在用铬43测试这个

当我按下选择按钮时,以下代码仅触发一个事件:

<script>
    window.addEventListener('select', function(ev) {
        console.log(ev, ev.timeStamp);
    });
</script>
<input type="text"><button onclick="document.querySelector('input').select()">select</button>

window.addEventListener('select',函数(ev){
控制台日志(ev,ev时间戳);
});
选择
但是,如果我向input type=text添加一个值,我会得到两个事件,事件之间唯一变化的是timeStamp属性:

<script>
  window.addEventListener('select', function(ev) {
    console.log(ev, ev.timeStamp);
  });
</script>
<input type="text" value="test"><button onclick="document.querySelector('input').select()">select</button>

window.addEventListener('select',函数(ev){
控制台日志(ev,ev时间戳);
});
选择

有人知道为什么会发生这种情况以及背后的原因吗?

我认为现在发生的是有两种类型的
选择事件被触发,但是由于
事件
对象有一组有限的细节,它们看起来完全一样。但是,当您更改输入的
selectionRange
时,似乎会触发一个
select
事件,当实际文本选择更改时,会触发一个select事件(在这种情况下,因为选择更改会激活输入焦点)。最后一个是当输入为空时没有被激发的一个-因为没有文本,所以文本选择没有变化

您可以通过将
select()
打开
mousedown
来分解它。因为它发生在按钮上的
mousedown
上,所以焦点不在输入上,而是停留在按钮上。但还是有一个事件被触发了。然后,如果只在
mouseup
上添加
focus()
,则不会更改输入的
selectionRange
,但实际文本会被选中并触发一个select事件。 或者,如果在单击处理程序中调用select(),然后在按钮上调用focus(),那么也只有一个事件。 您可以在此处看到这些行为:


话虽如此,它看起来确实像一个bug,应该由Chrome处理,以便只触发一个事件。

自从你发布问题以来,我一直在努力解决这个问题。感觉这可能是一个浏览器错误…可能与此问题有关的是在linux上,每当您选择时,它似乎也会将当前缓冲区复制到主缓冲区,并在尝试使输入不在第一次选择时复制,而仅在双击时才复制时发现两个事件的奇怪行为。谢谢你调查这件事!