如何以编程方式告诉 HTML SELECT 下拉列表(例如,由于鼠标悬停)?

2022-08-30 04:17:50

如何以编程方式告诉 HTML 要下拉(例如,由于鼠标悬停)?select


答案 1

这实际上曾经可以通过HTML + Javascript实现,尽管其他地方的人都说它不是,但它后来被弃用了,现在不起作用。

但是,这仅适用于Chrome。如果您有兴趣,请阅读更多内容。


根据 W3C 工作草案 HTML5,第 3.2.5.1.7 节。互动内容

HTML 中的某些元素具有激活行为,这意味着用户可以激活它们。这触发了一系列依赖于激活机制的事件[...]例如,使用键盘或语音输入,或通过鼠标单击

当用户以单击元素以外的方式触发具有已定义激活行为的元素时,交互事件的默认操作必须是对该元素运行综合单击激活步骤。

<select>作为一个交互式内容,我相信可以编程显示它的s。经过几个小时的尝试,我发现使用和工作。<option>document.createEvent().dispatchEvent()

也就是说,演示时间。这是一个工作小提琴。


网页:

<select id="dropdown">
    <option value="Red">Red</option>
    <option value="Green">Green</option>
    <option value="Blue">Blue</option>
</select>
<br>
<button id="fire" type="button" onclick="runThis()">Show dropdown items</button>​

Javascript:

// <select> element displays its options on mousedown, not click.
showDropdown = function (element) {
    var event;
    event = document.createEvent('MouseEvents');
    event.initMouseEvent('mousedown', true, true, window);
    element.dispatchEvent(event);
};

// This isn't magic.
window.runThis = function () { 
    var dropdown = document.getElementById('dropdown');
    showDropdown(dropdown);
};

如果有人找到一种方法来做同样的事情,但不是在Chrome中,请随时修改这个小提琴


答案 2

Xavier Ho的答案涵盖了如何解决目前大多数浏览器中的问题。但是,“不再通过JavaScript调度/修改”事件是很好的做法。(例如,在这种情况下)mousedown

从版本 53+ 开始,Google Chrome 将不会对不受信任的事件执行默认操作。例如,由脚本创建或修改的事件,或通过方法调度的事件。此更改是为了与Firefox和IE保持一致,我认为这已经没有执行该操作。dispatchEvent

出于测试目的,Fiddle提供了Xavier的答案在chrome 53 +中不起作用。(我不测试FF和IE)。

参考链接:

https://www.chromestatus.com/features/5718803933560832 https://www.chromestatus.com/features/6461137440735232

而 initMouseEvent 也被弃用