Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-JavaScript调度事件-我的选择菜单不会在setTimeout函数上打开_Javascript_Ios_Iphone_Select_Mobile - Fatal编程技术网

iPhone-JavaScript调度事件-我的选择菜单不会在setTimeout函数上打开

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

请在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 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事件是不可能的。