是否可以使用 JS 打开 HTML 选择以显示其选项列表?

IT技术 javascript html-select
2021-02-02 21:27:21

是否可以使用 JavaScript 打开 HTML 选择以显示其选项列表?

6个回答

不幸的是,这个问题有一个简单的答案,它是“否”

我也希望我可以以编程方式为键盘用户打开一个选择。在 Firefox 中,更改事件在选择失去焦点之前不会触发,如果菜单实际上没有打开,则在您关闭时它不会选择任何内容。跛脚哦!
2021-03-12 21:27:21
你知道这方面的任何背景吗?是否出于某种安全原因被禁止?实施它的标准是否未能合并?由于一些模糊的技术限制,它在技术上是不可能的吗?换句话说,只是,为什么
2021-03-16 21:27:21
@Amit 在 Chrome 中不起作用(不再)(使用 v55)
2021-03-22 21:27:21
在这里查看jsfiddle.net/oscarj24/GR9jU工作示例
2021-04-01 21:27:21
确定吗?
2021-04-06 21:27:21

我遇到了这个问题……并找到了一个可行的解决方案。

在用户单击一些纯 HTML 之前,我不希望选择框显示。所以我用opacity=.01. 单击后,我将其改回opacity=100. 这允许我隐藏选择,当用户单击文本时,选择出现并显示选项。

我的方法确实显示了显示/打开选项列表以及选择框本身。打开选项列表的唯一方法是单击选择框。我通过在某些目标文本上隐藏地覆盖选择来完成。
2021-03-14 21:27:21
这并没有回答问题,但它确实为您想要设置 <select> 元素样式同时仍提供本机控件的情况提供了一种解决方法,这就是您可能想要使用 js 打开选项下拉列表的原因. 如果将 <select> 的 opacity 设置为 0,则当用户单击不可见的 select 时,选项的下拉列表将正常显示。
2021-03-17 21:27:21
这不只是隐藏/显示实际的选择字段吗?问题是关于显示/打开选项列表。
2021-03-29 21:27:21
这是唯一能够在 Android 的有缺陷的 WebView 中设置选择菜单按钮样式的解决方案。谢谢!
2021-03-31 21:27:21
谢谢,找了几个小时。这应该是公认的答案!
2021-04-06 21:27:21

这适用于谷歌浏览器

dropDown = function (elementId) {
    var dropdown = document.getElementById(elementId);
    try {
        showDropdown(dropdown);
    } catch(e) {

    }
    return false;
};

showDropdown = function (element) {
    var event;
    event = document.createEvent('MouseEvents');
    event.initMouseEvent('mousedown', true, true, window);
    element.dispatchEvent(event);
};
仅供参考:它在 Chrome 35.0.1916.153 上对我有用 确保您传递的是实际元素而不是 jQuery obj。
2021-03-13 21:27:21
这也适用于最新的基于 Chromium 的 Opera。
2021-03-15 21:27:21
不幸的是,它现在在Chrome 53+上被弃用
2021-03-15 21:27:21
不适用于 Windows 上的 Chrome 59。
2021-03-16 21:27:21
它在 PC/Mac 上对我不起作用,但它适用于移动设备(并且您还需要添加 mouseup 事件)。
2021-03-18 21:27:21

我用这个...但它需要用户点击选择框...

这是 2 个 javascript 函数

function expand(obj)
{
    obj.size = 5;
}
function unexpand(obj)
{
    obj.size = 1;
}

然后我创建选择框

<select id="test" multiple="multiple" name="foo" onFocus="expand(this)" onBlur="unexpand(this)">
<option >option1</option>
<option >option2</option>
<option >option3</option>
<option >option4</option>
<option >option5</option>
</select> 

我知道这段代码有点晚了,但我希望它可以帮助和我有同样问题的人。

ps/fyi 我没有测试上面的代码(我动态创建了我的选择框),我写的代码只在 FireFox 中测试过。

在我的情况下,它不会完全解决问题,但它是一种选择。+1
2021-03-24 21:27:21
非常狡猾,谢谢。
2021-03-28 21:27:21
+1,以前做过类似的事情,我相信我在展开时也将它的位置设置为绝对位置,这样它就不会破坏文档流,并在折叠时回到阻塞状态。
2021-04-02 21:27:21
嘿,谢谢 Chad,您的评论只是帮助我解决了一个问题!希望我能 +1 你回来 ;)
2021-04-06 21:27:21
@DarrylHein:在这种情况下,这不仅仅是一个选项,而是 5<option>秒......
2021-04-08 21:27:21

在尝试解决这个问题一段时间后,我设法提出了一个有效的解决方案:

var event = new MouseEvent('mousedown');
element.dispatchEvent(event);

我也尝试在 Jquery 中实现这一点,使用triggerandmousedown或 onlymousedown但没有成功。

不适用于 Windows 上的 Chrome 59。不过在 Windows 上可以与 FireFox 51 一起使用。
2021-03-18 21:27:21
这在 Firefox 50 中似乎不起作用。
2021-03-23 21:27:21