2015-10-15 14 views
8

Czy ktoś inny mający problemy z wydarzeniem keyup w systemie iOS 9 nie jest uruchamiany?iOS 9 - zdarzenie keyup nie zwalniające

Tylko proste łóżko testowe powiela mi problem.

<input id="txtInput" /> 

Vanilla JS:

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

jQuery:

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

Ani ogień ...

+1

Klawiatura ekranowa lub zewnętrzna? Jesteś pewien, że to tylko iOS 9? Zobacz: http://stackoverflow.com/q/9940829/594235 – Sparky

+1

Na ekranie. I tak 100% - wydarzenie zostało uruchomione w systemie iOS 8 i wcześniej oraz w systemie Android. Dzięki - szukam teraz. – keldar

+0

wystąpił ten sam problem. jakakolwiek poprawka do tej pory? – nhu

Odpowiedz

0

To nie całkiem, ale praca wokół jest związać do keydown, aby przechwycić w Kluczem hich został wciśnięty, a input jeśli chcesz uzyskać wartość, w tym kluczu wpisane:

(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); 
     }); 
}()); 

Jeśli wpiszesz „a” pojawia się następujący:

  1. keydown pożarów.
  2. e.keyCode jest ustawiona na wartość ASCII naciśniętego klawisza.
  3. this.value jest '' (tj. Taki sam przed wpisaniem "a").
  4. input pożary.
  5. to undefined.
  6. this.value to 'a'.

Możesz również ręcznie wyzwolić zdarzenie input, jeśli zostanie naciśnięty klawisz Enter (13); input nie jest domyślnie uruchamiany tym kluczem.

3

Proponuję użyć zdarzenia keypress w przeglądarkach z ekranami dotykowymi. Wiem jednak, że to you can't really detect touch screen screens, więc pozostawia ci kilka opcji, które prawdopodobnie podyktuje Twoja sytuacja.

  1. Dołącz oba zdarzenia keyup i keypress. Prawdopodobnie będzie to zależeć od tego, jak długo trwa przetwarzanie i czy w niektórych przeglądarkach występują podwójne pożary.
  2. Próba określenia, czy przeglądarka jest ekranem dotykowym (takim jak przy użyciu Modernizr), a następnie dołączenie programu obsługi awaryjnej, takiego jak change.

Tak czy inaczej, otrzymujesz dwa detektory zdarzeń.

1
$('#yourid').bind('keypress', function(e) { 
    // This will work 
}); 
Powiązane problemy