【发布时间】:2011-10-08 00:46:01
【问题描述】:
有没有办法使用 JavaScript 来检测给定的浏览器是否将焦点 <select multiple> 元素呈现为弹出窗口或仅作为内联框?
在某些平台上,例如 Android 浏览器和 iOS Safari,可以通过比较例如的高度来检测弹出窗口的使用,例如,
<select multiple>
<option>a</option>
<option>a</option>
<option>a</option>
<option>a</option>
<option>a</option>
<select>
和
<select multiple>
<option>a</option>
<select>
高度相同,因为<select>s 被缩小为带有下拉按钮的单个框。但在其他设备上,例如 Playbook,此测试会给出假阴性,因为 Playbook 浏览器会呈现展开的选择列表并且在单击它们时会显示弹出窗口。
谁能想到一种可靠的方法来确定是否显示原生选择弹出窗口?
【问题讨论】:
-
为什么要检测这个?如何渲染这样的组件取决于客户端,而不是您。除非您有非常具体的原因,否则您应该不理会这种行为。
-
我正在使用 jQuery Mobile 开发一个项目,并试图想出一个替代 jQuery Mobile 的 select menus 演示文稿的方法。他们显示选择选项的本机方法在不显示弹出窗口的浏览器中不起作用,而两个样式版本的性能相当差。我希望能够始终使用原生控件,使用原生弹出窗口或假覆盖。
-
注意select的size选项。如果这是“1”,浏览器可能会将元素呈现为内联元素。
-
对于这样的事情,我可能会检测浏览器本身并为每个浏览器(Android、iOS、WebOS 等)创建特定条件。
-
同意masedesign。您可以设置一些正则表达式来获取浏览器和操作系统,然后对不同的行为进行硬编码,但是每次您尝试混合原生控件和渲染控件时都会遇到麻烦。一个经典的例子是 AWT、Swing、SWT。
标签: javascript html select cross-browser browser-feature-detection