2015-10-15 16 views
8

Qualcuno ha problemi con l'evento keyup in iOS 9 che non si attiva?iOS 9 - evento keyup non attivato

Solo un semplice banco di prova replica il problema per me.

<input id="txtInput" /> 

Vanilla JS:

document.getElementById('txtInput').onkeyup = function() { 
    console.log('keyup triggered'); 
} 

jQuery:

$('#txtInput').on('keyup', function() { 
    console.log('keyup triggered'); 
}); 

Né il fuoco ...

+1

Tastiera su schermo o esterna? Sei sicuro che sia solo iOS 9? Vedi: http://stackoverflow.com/q/9940829/594235 – Sparky

+1

On-screen. E sì 100% - l'evento è stato lanciato su iOS 8 e precedenti e Android. Grazie - guardando ora. – keldar

+0

ha riscontrato lo stesso problema. qualche correzione fino ad ora? – nhu

risposta

0

Non è abbastanza, ma un lavoro in giro è quello di legare a keydown per catturare w chiave hich è stato premuto, e input se si vuole ottenere il valore, tra cui la chiave scritta:

(function() { 
    var keyCode; 

    $('#txtInput') 
     .on('keydown', function (e) { 
      // value not updated yet 
      keyCode = e.keyCode; 

      // Enter key does not trigger 'input' events; manually trigger it 
      if (e.keyCode === 13) $(this).trigger('input'); 
     }) 
     .on('input', function (e) { 
      console.log(keyCode, this.value); 
     }); 
}()); 

Se si digita 'a' la seguenti situazioni:

  1. keydown incendi.
  2. e.keyCode è impostato sul valore ASCII del tasto premuto.
  3. this.value è '' (vale a dire lo stesso prima che 'a' sia stato digitato).
  4. input incendi.
  5. e.keyCode è undefined.
  6. this.value è 'a'.

È inoltre possibile attivare manualmente un evento input se si preme il tasto Invio (13); input non viene attivato da questa chiave per impostazione predefinita.

3

Suggerisco di utilizzare l'evento keypress sui browser con touch screen. So che lo you can't really detect touch screen screens, quindi, ti lascia alcune opzioni che la tua situazione probabilmente imporrà.

  1. Allegare entrambi gli eventi keyup e keypress. Ciò dipenderebbe probabilmente dalla quantità di elaborazione in corso e se si ottengono i doppi incendi in alcuni browser.
  2. Tentare di determinare se il browser è un touchscreen (ad esempio utilizzando Modernizr) e quindi collegare un gestore di fallback come change.

In entrambi i casi, si finisce con due ascoltatori di eventi.

1
$('#yourid').bind('keypress', function(e) { 
    // This will work 
}); 
Problemi correlati