我没有希望,但我会问,以防万一.
我希望能够使用JavaScript在iPhone / iPad的移动Safari中打开一个select元素.
广泛的Google / Stack Overflow搜索显示,很多人都希望能够在浏览器中实现这一点,但不支持(为什么不,我想知道?)已经提出了各种各样的黑客,从select元素调用focus(),并改变其size属性以使更多的选项元素可见,或使用÷构造一个完全模拟选择元素.和< ul>元素.但是,我想使用iPad和iPhone中的本地浏览器选择控件.
我想知道,也许有人可能会知道一个专有的Apple WebKit方法来做到这一点.它会是这样的:
var myselect = document.getElementsByTagName("select")[0]; myselect.open(); // this method doesn't exist
作为一个奖励,知道一个布尔属性说明select元素当前是否打开/是否有效(也就是说,不仅该元素是否具有焦点)也是一件好事.我知道我可以通过跟踪点击和更改事件来解决这个问题,但一个简单的属性将是有用的.
妄想?
更新:
我还没有答案,但是我发现模拟mousedown成功地在Google Chrome中打开了一个select元素,而不是iPad或Firefox等等.
function simulateMouseEvent(eventName,element) { var evt = document.createEvent("MouseEvents"); evt.initMouseEvent(eventName,true,window,false,null); element.dispatchEvent(evt); } simulateMouseEvent("mousedown",select);
更新:
我在这里选择了一个相关但不同的(和类似的未回答的)问题:Is there a DOM event that fires when an HTML select element is closed?
解决方法
使用JS触发HTML控件是一个非常灰色的区域,部分是由于安全原因,部分原因是缺乏支持.即使使用像jQuery这样的框架,你也不能简单地点击()一个链接,就像按钮上的click()一样,你需要在浏览器级触发一个本地点击事件(我相信最新版本的Selenium这个,但是这是一个测试框架,所以不适合这个问题).恭喜能够在Chrome中实现部分结果!但是,您将找不到使用实际选择输入的通用解决方案.
我建议使用不同类型的控件 – 如果要按一个按钮激活某个功能的垂直堆叠按钮,或者如果您想要一个多选格式.