繁体   English   中英

是否有JavaScript“选择框显示”事件或类似的东西? (使用jQuery)

[英]Is there a JavaScript “select box reveal” event or something like it? (using jQuery)

我有一个HTML选择:

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

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

mousedown在点击它时起作用,但如果它们选中它并按回车键则不会做任何事情。

focus也适用于点击,几乎适用于标签,但它会立即触发标签,而不是等到按Enter键显示选项列表。 (这是一个问题,因为如果他们选中它然后选项卡而不按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”作为例外也有点hacky - 肯定有其他例外不会导致select被揭示。

是否有一个简单的事件涵盖了这个用例(或者至少包含它的一些不那么可恶的事件)?

(注意:我知道有类似的结构系统可供选择 - 例如,通过提前填充选项而不是选择显示;但我不是在寻找替代建议,只是想知道是否存在是明确提出的问题的解决方案)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM