2016-05-09 23 views
7

Tôi có trường văn bản nơi người dùng có thể nhập dữ liệu. Họ có thể sử dụng phím tab và sau đó trường được thụt vào. Điều này làm việc tuyệt vời trên tất cả mọi thứ ngoại trừ ios với bàn phím bluetooth.Javascript - Phát hiện phím Tab iPad w/Bàn phím Bluetooth

Nếu tôi ghé thăm http://www.rapidtables.com/tools/notepad.htm, tôi có thể tab trên máy tính để bàn của tôi/máy tính xách tay. Nhưng trên iPad của tôi ... không có súc sắc.

Nếu tôi truy cập https://api.jquery.com/keydown/, https://api.jquery.com/keyup/, https://api.jquery.com/keypress/ ... KHÔNG có ai trong số họ phát hiện khóa tab trên iPad.

Tab trình đầu mối trong ios ứng dụng bản địa, như Notes, và phím tab không di chuyển giữa các lĩnh vực bên trong một trang web. Có cách nào để phát hiện các phím tab trong Javascript mà bất cứ ai biết?

EDIT

Đây là một fiddle Tôi ném lại với nhau để bạn có thể xem mã và vấn đề trong hành động: https://jsfiddle.net/9jv0bmbx/1/ Về cơ bản tôi chỉ kiểm tra xem e.keyCode===9 mà hoạt động trên máy tính để bàn/máy tính xách tay. Trên iPad, nó đăng ký EVERY phím ngoại trừ phím tab.

+0

Vì vậy, nếu bạn đăng nhập bấm phím khi nhấn tab trên các thiết bị vi phạm, nó có ghi nhật ký gì không? Nếu không, nó có thể là tab đó là thoát khỏi lĩnh vực mà không thực sự bắn một phím trên lĩnh vực này. Hãy thử tạo một trình ghi nhật ký phím toàn cục và xem bạn có thể đăng nhập một tab hay không. Sau đây nên làm điều đó. $ (tài liệu) .keydown (function (e) { \t \t \t console.log (e.keyCode);}); – RayfenWindspear

+0

Tôi đã thêm điều đó vào câu đố. Vẫn không có gì. Nhưng phím tab trong trường đầu tiên vẫn di chuyển tiêu điểm đến trường thứ hai. Vì vậy, các phím tab được đăng ký bởi các ứng dụng (trình duyệt) để xử lý các sự kiện tập trung, nhưng không phải là một sự kiện bàn phím tôi đoán.Tôi đã thử cả chrome và safari, cùng một kết quả. –

+0

Có bàn tay của tôi trên một ... đề nghị của tôi đã không làm việc. Lấy làm tiếc. – RayfenWindspear

Trả lời

1

EDIT2:

Dưới đây là một lựa chọn cho một giải pháp. Tôi đã tìm thấy một bài viết hướng dẫn cách chụp TẤT CẢ các sự kiện. Dưới đây là một jsfiddle, và đây là article Tôi tìm thấy khái niệm này. Lưu ý rằng trong jsfiddle tôi trả về addEventListener ban đầu bởi vì những gì bạn cần đã được thực hiện sau khi thêm một trình nghe trống.

jsfiddle

var oldAddEventListener = EventTarget.prototype.addEventListener; 

EventTarget.prototype.addEventListener = function(eventName, eventHandler) 
{ 
    oldAddEventListener.call(this, eventName, function(event) { 
     if(event.target.id === "textarea" && event.keyCode===9){ 
     event.preventDefault(); 
     $(this).val($(this).val()+"\t"); 
     $("#log").append("<li>Tab Pressed</li>"); 
     } 
    eventHandler(event); 
    }); 
}; 
$("#textarea").keydown(function(e) { 

}); 

EventTarget.prototype.addEventListener = oldAddEventListener; 

EDIT:

Bàn phím kiểm tra ở đây nắm bắt được KeyDown tab. Nhìn vào thư viện này, nó sẽ khắc phục vấn đề của bạn. Hoặc là sử dụng thư viện trực tiếp, hoặc tìm hiểu cách thức nó nắm bắt tab trên iOS bằng cách đào thông qua mã. http://dmauro.github.io/Keypress/

Có một số vấn đề về khóa phần cứng/chức năng gặp phải khi nhấn phím tab thông thường. Nhấn OPTION + Tab sẽ kích hoạt trình xử lý của bạn như bình thường. Có lẽ có một số loại cài đặt đang gây ra điều này, nhưng rõ ràng bạn không thể mong đợi người dùng thay đổi cài đặt của họ để sử dụng ứng dụng của bạn. Bạn có thể tìm thấy một số cách để tận dụng điều này bằng cách nào đó, nhưng nó xuất hiện rằng đây là hành vi mặc định và bạn đang mắc kẹt với nó.

Có thể phát hiện thiết bị iOS và tìm ra một số loại ghi đè cho hành vi mặc định của tab. Hoặc bạn có thể chụp focusOut, hoặc làm mờ các sự kiện và phát hiện nếu nó không phải do chuột gây ra.

+0

Tôi có một chỉnh sửa để thực hiện với một giải pháp, nhưng tôi phải chờ cho anh chàng với iPad để trở lại từ bữa ăn trưa để mở khóa nó XD. – RayfenWindspear

+0

Tôi chỉ cần thiết lập http://jsfiddle.net/gqxgax76/ để xem tôi có thể sử dụng Keypress hay không. Những gì tôi phát hiện ra là khi tài liệu/cửa sổ có tiêu điểm và không có phần tử nào, thì khóa tab được nhận dạng. Ngay sau khi bạn tập trung vào một đầu vào/textarea, sau đó tab không còn hoạt động. Tôi sẽ xem tôi có thể lấy ví dụ thứ hai để làm việc không. –

+0

jsfiddle đó không hiển thị các tab trên đầu của tôi. OPT + Tab vẫn hoạt động. – RayfenWindspear

Các vấn đề liên quan