Aşağıda basit bir snippet'i hazırladım, bir metin giriş alanı, bir düğme ve bir tane seçin. Düğmeye tıklamak programatik olarak girişe odaklanır. Seçimi değiştirmek de girişe odaklanır. Bu, tüm masaüstü tarayıcılarında ve Android'de geçerlidir, ancak iOS'ta değildir. IOS'ta odaklama, düğme için çalışır, ancak seçim için değil.Seçme etiketinin güvenilir bir onchange olayı olan iOS'ta metin girişini programa göre nasıl odaklanır?
var mySelect = document.getElementById('mySelect');
var myButton = document.getElementById('myButton');
var myTextInput = document.getElementById('myTextInput');
mySelect.addEventListener('change', function(changeEvent) {
console.log('Change event trusted: ' + changeEvent.isTrusted);
myTextInput.focus();
});
myButton.addEventListener('click', function(clickEvent) {
console.log('Click event trusted: ' + clickEvent.isTrusted);
myTextInput.focus();
});
<select id="mySelect">
<option value="0">Option 1</option>
<option value="1">Option 2</option>
</select>
<button id="myButton">Focus through onclick</button>
<input id="myTextInput" type="text" />
O iOS yazılabilir girişinin programatik odak engellemek için can sıkıcı pop-up klavye önlemek için bazı yerli korunması davranışa sahip olduğu görülmektedir. Bu koruma sadece bir noktada gerçek bir kullanıcı etkileşimi tarafından başlatılmayan olayları reddeder. Spec entry
IsTrusted öznitelik için başlatıldı değer döndürmesi gerekir:: spec Tanım olarak
, bir kullanıcı tarafından başlatılan bir olay, bir etkinliği güvenilir olan. Bir olay oluşturulduğunda, özellik false olarak başlatılmalıdır.
isTrusted, bir etkinliğin kullanıcı aracısı tarafından gönderilip gönderilmediğini gösteren bir kolaylıktır (dispatchEvent() yönteminin tersine). Tek eski istisna, kullanıcı aracısının isTrusted özniteliği false olarak başlatılan bir olayı göndermesine neden olan click() 'dir. Benim
console.log
tablolar aracılığıyla görebilirsiniz
hem click
ve change
olaylar onların isTrusted
özelliği true
var, ama ikincisi zaten iOS tarafından engellendiğini.
Çok sayıda arama yaptım ve bu iOS davranışının amaçlandığını açıklayan bir ifade bulamadı.
Bu konuda bir şey bilen var mı? <select>
'un değişim etkinliğini elde etmek için bir girişe odaklanmak ve klavyeyi yükseltmek için bir iş var mı?
select
çoğunlukla birlikte
click
,
mouseup
ve
mousedown
çalışan birçok yol, denedi, ama oğlan bu olaylar
Sonuç olarak ... farklı tarayıcılarda tutarsız
, burada da aynı snippet'imin jsfiddle olduğunu Yukarıda verilen. https://jsfiddle.net/qndg7sex/4/
"Seks" kelimesini nasıl içerdiğini not edin.
DÜZENLEME
Ben tanıtan denedi bir kukla olan click
select
'ın change
tarafından tetiklenen olacaktır button
. Bu dummy button
'işleyicide .focus
input
'u denedim, ancak boşuna.
DÜZENLEME 2
Ben ConnorsFan ödüllendirme lütuf verdi.IOS'taki davranışa yönelik resmi bir girişle ilgili herhangi bir güncellememememiz gerçeği, bu konuda gerçekten herhangi bir halka açık bilgi bulunmadığına olan inancımı güçlendiriyor. Yanıtı kabul edildiği şekilde de işaretledim çünkü yaklaşımım burada önerilen çözüm ile oldukça benzerdi. Hiçbir jQuery eklentisi aslında dahil değildi, ama yine de bir seçim gibi davranan özel bir giriş elemanı aldı.
Buna odaklanan bir iş parçacığı: http://stackoverflow.com/a/16601288/6429774 – Phil