<分区>
每次我添加一个事件监听器以某种方式对选择框的更改执行 preventDefault
时,它会滚动到顶部。
下面是一个最小的例子:
document.getElementById('foo').onmousedown = function(e) {
e.target.parentElement.focus();
e.target.selected = !e.target.selected;
e.preventDefault();
return false;
}
<select multiple size="5" id="foo">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
</select>
重现这种奇怪行为的步骤是:
- 点击选项
2
- 向下滚动一点
- 点击任何选项元素
您的 View 现在应该向上滚动以在最顶部显示选项 2
。
这对我来说似乎很奇怪,这真的很烦人。
对此的后续问题:我怎样才能阻止这种情况发生?我正在尝试制作一个脚本,使 select multiple
框的行为就像始终按下 ctrl 键一样(请参阅 https://stackoverflow.com/a/48217702/1256925 )但是当 size
大于列出的选项数量。
编辑:我已经在 MS Edge 中对其进行了测试(我在这台 PC 上没有安装 Firefox),它似乎可以正确处理这个问题,所以这可能是一个仅限 Chrome 的错误。如果是这样,我的后续问题仍然存在:如何防止 Chrome 这样做? (另外,有人可以告诉我这是否也发生在 FF 中吗?)