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

Dar*_*ein 110 javascript html-select

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

Gar*_*eth 80

不幸的是,对这个问题有一个简单的答案,它是"不"

  • 确定吗? (17认同)
  • 您知道这方面的背景吗?出于某种安全原因不允许这样做吗?实施标准是否未能合并?由于一些模糊的技术限制,这在技术上是不可能的吗?换句话说,只是,*为什么*? (5认同)
  • 我也希望我能以编程方式为键盘用户打开一个选择.在Firefox中,更改事件在选择失去焦点之前不会触发,如果菜单实际上没有打开,则在选项卡关闭时它不会选择任何内容.LAME-O! (3认同)
  • @Amit在Chrome中不再起作用(使用v55) (3认同)
  • 如果没有任何解释,这不是一个有用的答案。 (3认同)
  • 在这里查看 http://jsfiddle.net/oscarj24/GR9jU/ 工作示例 (2认同)

小智 27

这适用于Google Chrome

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);
};
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,它现已在[Chrome 53+]上弃用(https://www.chromestatus.com/features/57188​​03933560832) (20认同)
  • 不适合我. (4认同)
  • 仅供参考:它确实适用于Chrome 35.0.1916.153确保您传递的是实际元素,而不是jQuery obj. (4认同)
  • 在Windows上无法使用Chrome 59. (2认同)

Phi*_*hil 25

我有这个问题......并找到了一个可行的解决方案.

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

  • 这不仅仅是隐藏/显示实际的选择字段吗?问题是关于显示/打开选项列表. (4认同)
  • 这并没有回答这个问题,但是它提供了一种解决方法,用于在仍然提供本机控件的同时设置<select>元素的样式,这就是为什么你可能想要使用js打开选项下拉列表的原因.如果将<select>的不透明度设置为0,则当用户单击不可见选择时,选项的下拉菜单将正常显示. (3认同)
  • 我的方法确实显示了显示/打开选项列表以及选择框本身。打开选项列表的唯一方法是单击选择框。这是我通过在某些目标文本上隐藏地覆盖选择来完成的。 (2认同)

小智 25

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

这是2个javascript函数

function expand(obj)
{
    obj.size = 5;
}
function unexpand(obj)
{
    obj.size = 1;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建选择框

<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> 
Run Code Online (Sandbox Code Playgroud)

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

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

  • @DarrylHein:在这种情况下,它不只是___an__ option_,它是5` <option>`s ... (5认同)
  • +1,之前做过类似的事情,我相信我在扩展时也将它的位置设置为绝对,因此它不会破坏文档流,并在崩溃时返回阻止. (4认同)

Asa*_*vid 5

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

var event = new MouseEvent('mousedown');
element.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

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

  • 这在 Firefox 50 中似乎不起作用。 (3认同)
  • 不适用于 Windows 上的 Chrome 59。不过在 Windows 上可以与 FireFox 51 一起使用。 (3认同)