iOS上的JavaScript:打开HTML选择元素

我没有希望,但我会问,以防万一.

我希望能够使用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中实现部分结果!但是,您将找不到使用实际选择输入的通用解决方案.

我建议使用不同类型的控件 – 如果要按一个按钮激活某个功能的垂直堆叠按钮,或者如果您想要一个多选格式.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...