Si prega di aprire questi esempi sul proprio iPhone.iPhone - Evento di invio JavaScript - Il menu di selezione personale non si apre su una funzione setTimeout
Il seguente codice rappresenta il comportamento corretto.
<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');
}
Se si aggiunge una funzione setTimeout non funzionerà.
<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);
}
http://jsfiddle.net/ghwfstmj/1/
Qualsiasi idea del perché?
Vedo anche uno strano problema di scorrimento. Se ci sono due menu selezionati, scorrerà verso il basso fino al pulsante ed eseguirà il backup se si utilizzano le frecce native (selezionare le opzioni) sinistra e destra. Se si fa clic su fatto che non fa questo o fare clic su di essi manualmente:
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');
}
http://jsfiddle.net/ghwfstmj/4/
Cheers!
Sembra che tutto funzioni abbastanza bene. La cosa del timer funziona (almeno con chrome). Riguardo allo strano comportamento con frecce native left right, questa potrebbe essere solo una cosa fondamentale. Disponi il click e il mouseevent, ma forse dovresti attivare anche tu il selMenu – Bene
Provalo su Safari (iPhone). Il browser e l'emulatore funzionano correttamente. Ho provato ad aggiungere un focus e non ho avuto fortuna. Puoi ottenere lo stesso comportamento se aggiungi un tabindex e usi il codice $ ('# selectMenu'). Trigger ('focus'); Ciò significa che non è correlato all'evento di messa a fuoco. Ho anche aggiunto un extra dispatchEvent per questo e non ho avuto fortuna :( – Paddy
Oups, il mio errore sono andato dritto nel codice e ho dimenticato l'intera parte "iPhone" – Bene