2015-10-15 19 views
8

Có ai khác đang gặp sự cố với sự kiện keyup trong iOS 9 không kích hoạt không?iOS 9 - sự kiện khóa không kích hoạt

Chỉ cần một chiếc giường thử nghiệm đơn giản sao chép vấn đề cho tôi.

<input id="txtInput" /> 

Vanilla JS:

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

jQuery:

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

Cả lửa ...

+1

Màn hình hoặc bàn phím bên ngoài? Bạn có chắc chắn nó chỉ là iOS 9? Xem: http://stackoverflow.com/q/9940829/594235 – Sparky

+1

Trên màn hình. Và vâng 100% - sự kiện được kích hoạt trong iOS 8 và trước đó và Android. Cảm ơn - đang tìm kiếm. – keldar

+0

gặp phải vấn đề tương tự. sửa chữa cho đến nay? – nhu

Trả lời

0

Nó không đẹp, nhưng một việc xung quanh là để ràng buộc đến keydown để chụp ảnh chìa khóa hich đã được ép, và input nếu bạn muốn để có được những giá trị, bao gồm phím gõ:

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

Nếu bạn gõ 'a' sau đây xảy ra:

  1. keydown cháy.
  2. e.keyCode được đặt thành giá trị ASCII của phím được nhấn.
  3. this.value'' (tức là trước khi 'a' được nhập).
  4. input vụ cháy.
  5. e.keyCodeundefined.
  6. this.value'a'.

Bạn cũng có thể kích hoạt sự kiện input theo cách thủ công nếu nhấn phím enter (13); Theo mặc định, input không được kích hoạt bởi khóa này.

3

Tôi khuyên bạn nên sử dụng sự kiện keypress trên trình duyệt có màn hình cảm ứng. Tôi biết rằng you can't really detect touch screen screens, tuy nhiên, do đó, nó lá bạn với một vài tùy chọn mà tình hình của bạn sẽ có khả năng ra lệnh.

  1. Đính kèm cả sự kiện keyupkeypress. Điều này có thể sẽ phụ thuộc vào quá trình xử lý đang diễn ra và nếu bạn đang nhận được các vụ cháy đôi trong một số trình duyệt.
  2. Cố gắng xác định xem trình duyệt có phải là màn hình cảm ứng hay không (như sử dụng Modernizr) và sau đó đính kèm trình xử lý dự phòng như change.

Dù bằng cách nào, bạn kết thúc với hai trình xử lý sự kiện.

1
$('#yourid').bind('keypress', function(e) { 
    // This will work 
}); 
Các vấn đề liên quan