iPhone-JavaScript调度事件-我的选择菜单不会在setTimeout函数上打开
请在iPhone上打开这些示例 下面的代码是正确的行为iPhone-JavaScript调度事件-我的选择菜单不会在setTimeout函数上打开,javascript,ios,iphone,select,mobile,Javascript,Ios,Iphone,Select,Mobile,请在iPhone上打开这些示例 下面的代码是正确的行为 <select id="selectMenu"> <option value="1">1</option> <option value="2">2</option> </select> <input id="button" name="button" type="button" value="Click Me" /> var initE
<select id="selectMenu">
<option value="1">1</option>
<option value="2">2</option>
</select>
<input id="button" name="button" type="button" value="Click Me" />
var initEvt = function (el, type) {
var e = document.createEvent('MouseEvents');
e.initEvent(type, true, true, window);
el.dispatchEvent(e);
},
selMenu;
selMenu = document.getElementById('selectMenu');
document.getElementById('button').onclick = function () {
initEvt(selMenu, 'mouseover');
initEvt(selMenu, 'mousedown');
initEvt(selMenu, 'mouseup');
initEvt(selMenu, 'click');
}
1.
2.
var initEvt=函数(el,类型){
var e=document.createEvent('MouseEvents');
e、 initEvent(类型、true、true、window);
el.调度事件(e);
},
selMenu;
selMenu=document.getElementById('selectMenu');
document.getElementById('button')。onclick=function(){
initEvt(selMenu,'mouseover');
initEvt(选择菜单,“鼠标向下”);
initEvt(selMenu,'mouseup');
initEvt(选择菜单“单击”);
}
如果添加setTimeout函数,它将不起作用
<select id="selectMenu">
<option value="1">1</option>
<option value="2">2</option>
</select>
<input id="button" name="button" type="button" value="Click Me" />
var initEvt = function (el, type) {
var e = document.createEvent('MouseEvents');
e.initEvent(type, true, true, window);
el.dispatchEvent(e);
},
selMenu;
selMenu = document.getElementById('selectMenu');
document.getElementById('button').onclick = function () {
setTimeout(function () {
initEvt(selMenu, 'mouseover');
initEvt(selMenu, 'mousedown');
initEvt(selMenu, 'mouseup');
initEvt(selMenu, 'click');
}, 500);
}
1.
2.
var initEvt=函数(el,类型){
var e=document.createEvent('MouseEvents');
e、 initEvent(类型、true、true、window);
el.调度事件(e);
},
selMenu;
selMenu=document.getElementById('selectMenu');
document.getElementById('button')。onclick=function(){
setTimeout(函数(){
initEvt(selMenu,'mouseover');
initEvt(选择菜单,“鼠标向下”);
initEvt(selMenu,'mouseup');
initEvt(选择菜单“单击”);
}, 500);
}
知道为什么吗
我还看到一个奇怪的卷轴问题。如果有两个选择菜单,它将向下滚动至该按钮,如果使用本机(选择选项)左箭头和右箭头,则会进行备份。如果单击“完成”,则不会执行此操作或手动单击:
select {
display: block;
width: 100%;
}
#selectMenu { margin-bottom: 50px; }
#selectMenu2 { margin-bottom: 200px; }
<select id="selectMenu">
<option value="1">1</option>
<option value="2">2</option>
</select>
<select id="selectMenu2">
<option value="1">1</option>
<option value="2">2</option>
</select>
<input id="button" name="button" type="button" value="Click Me" />
var initEvt = function (el, type) {
var e = document.createEvent('MouseEvents');
e.initEvent(type, true, true, window);
el.dispatchEvent(e);
},
selMenu;
selMenu = document.getElementById('selectMenu');
document.getElementById('button').onclick = function () {
initEvt(selMenu, 'mouseover');
initEvt(selMenu, 'mousedown');
initEvt(selMenu, 'mouseup');
initEvt(selMenu, 'click');
}
选择{
显示:块;
宽度:100%;
}
#选择功能表{页边距底部:50px;}
#选择菜单2{页边距底部:200px;}
1.
2.
1.
2.
var initEvt=函数(el,类型){
var e=document.createEvent('MouseEvents');
e、 initEvent(类型、true、true、window);
el.调度事件(e);
},
selMenu;
selMenu=document.getElementById('selectMenu');
document.getElementById('button')。onclick=function(){
initEvt(selMenu,'mouseover');
initEvt(选择菜单,“鼠标向下”);
initEvt(selMenu,'mouseup');
initEvt(选择菜单“单击”);
}
干杯 嗯,这一切都很奇怪。我想你遇到了一个关于计时器的iOS错误。下面是一个与您的示例稍有不同的示例,它再现了问题:
var raiseSelectMenu=函数(){
var eventOptions={
“视图”:窗口,
“泡沫”:没错,
“可取消”:true
};
var menu=document.getElementById('selectMenu');
dispatchEvent(新的MouseEvent('mousedown',eventOptions));
dispatchEvent(新的MouseEvent('mouseup',eventOptions');
};
var delayRaiseSelectMenu=函数(){
设置超时(raiseSelectMenu,0);
};
document.getElementById('delay')。onclick=DelayRaiseSelect菜单;
document.getElementById('nodelay')。onclick=raiseSelectMenu代码>
1.
2.
看起来一切正常。计时器正在工作(至少在chrome上)。关于本机左右箭头的奇怪行为,这可能只是一个焦点。您可以发送click和MouseeEvent,但也许您应该在selMenu上触发焦点,也可以在Safari(iPhone)上尝试。浏览器和仿真器工作正常。我试着添加一个焦点,但没有成功。如果添加一个tabindex并使用代码$('#selectMenu').trigger('focus');这意味着它与焦点事件无关。我还为此添加了一个额外的dispatchEvent,但运气不好:(哎呀,我的错误,我在代码中直接出现了,忘记了整个“iPhone”部分。嘿,我认为这是不可能的。你的例子在FF中也不起作用。这里基本上是重复的——它说在某些浏览器上触发mousedown事件是不可能的。