是否存在JavaScript“;选择框显示”;事件或类似的事情?(使用jQuery)

Is there a JavaScript "select box reveal" event or something like it? (using jQuery)

本文关键字:jQuery 使用 JavaScript 存在 选择 事件 显示 是否      更新时间:2023-09-26

我有一个html选择:

<select>
    <option>Choose one</option>
</select>

使用jQuery,当选择选项列表被显示时,是否有一个事件可以被我捕获?(我需要这样做的原因是,我想将列表的填充推迟到需要向用户显示列表的那一刻)。

当他们点击它时,mousedown起作用,但如果他们点击它并按enter键,则不会执行任何操作。

focus也适用于单击,几乎适用于选项卡到它,但它会在选项卡到它时立即启动,而不是等到他们按下enter键才能显示选项列表。(这是一个问题,因为如果他们点击它,然后在不按回车键的情况下点击,我不希望触发事件)。

我甚至想出了这个可憎的东西:

var select_reveal = function(ev) { ... }
$('select').on('mousedown', select_reveal).on('keydown', function(ev) {
    // character code 9 is tab
    if (ev.which !== 9) select_reveal.bind(this)(ev);
});

这似乎确实有效。它甚至适用于他们键入字母表的情况(它填充列表,然后跳到以该字母开头的第一个选项)。但正如我所说,这有点令人憎恶。仅仅将"tab"作为异常进行检查也有点麻烦——肯定还有其他异常不会导致选择被显示。

有没有一个简单的事件覆盖了这个用例(或者至少有一些不那么令人讨厌的事件覆盖它)?

(注意:我知道这样构建系统有其他选择——例如,在选项发生变化时提前填充选项,而不是在选择显示上;但我并不是在寻找其他建议,只是想知道是否有明确提出的问题的解决方案)

我不确定你打算支持哪些浏览器,但在你走得太远之前,请注意,如果你更改选择列表的内容(例如添加/更改/删除选项),IE实际上会吞下(鼠标点击或聚焦)事件,该事件会打开列表,并给用户留下一个关闭的选择列表。有关详细信息,请参见此处:http://webbugtrack.blogspot.com/2009/02/bug-487-onclickonfocus-bugs-on-select.html

我认为,如果你真的觉得推迟装载会有好处。。。我会在初始加载时隐藏/禁用选择列表,并在渲染后触发选项的异步加载。。。准备就绪时重新启用/显示选择。