2013-05-16 32 views
6

Tôi biết rằng các câu hỏi tương tự đã được hỏi trước đây, nhưng hành vi tôi thấy hơi khác so với những gì tôi có thể tìm thấy trên SO .preventDefault() khi một phím tab được nhấp vào bên trong văn bản trong Chrome

Tôi có một biểu mẫu mà tôi đang chia thành nhiều tab accordion jquery. Tôi muốn người dùng có thể điền vào một trường văn bản trong tab 1 và sau đó nhấn phím tab để tự động mở tab 2 và đặt trọng tâm vào trường văn bản trong tab đó. Sự cố tôi đang gặp đang ngăn chặn hành vi khóa tab mặc định trong Chrome.

$("form#new_story").keydown(function (e) { 
    if(!e) var e = window.event; 
    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
     e.preventDefault(); 
     alert("tab was keyed"); 
    } 
}); 

Tôi đã thử nghiệm điều này trong Chrome, FF và Safari. Hoạt động tốt trong FF và Safari, nhưng khi người dùng đang sử dụng các phím Chrome xuống phím tab, một tab thực được nhập vào trường văn bản trước khi sự kiện kích hoạt. Tôi muốn dừng hành vi này, nhưng tab rõ ràng đang được nhập trước khi sự kiện thậm chí kích hoạt. Có cách nào để ngăn chặn điều này?

+0

Tab được nhập * trước * sự kiện 'phím tắt '? Âm thanh khó xảy ra. Nhưng để ngăn chặn nó, bạn có thể móc vào 'nhấn phím 'và ngăn chặn điều đó. – Bergi

+0

'nhấn phím 'không nắm bắt được thao tác nhấn tab (Tôi biết rằng' nhấn phím' không nắm bắt các phím noncharacter trong các phiên bản cũ hơn của ví dụ. Không biết rằng nó sẽ không nắm bắt các phím không phải ký tự trong Chrome. Đã chỉ tìm thấy vấn đề Đó là một sự tương tác rất hài hước giữa jquery accordion và jquery validate.Để gửi nó như là một câu trả lời dưới đây. –

Trả lời

1

Chỉ ra rằng vấn đề đã được kích hoạt bởi jquery xác thực. Tôi đã xác nhận từng lĩnh vực văn bản dưới hình thức với các thiết lập này tùy chọn:

$("form#new_story").validate({ 
         ignore: [], 
         onkeyup: false, //stop eager validation of fields so to not hit server each time user clicks a key in the email field 
         onfocusout: true, 
         ... 
        }; 

Ngay sau khi tôi đặt onfocusout: false tôi đã có thể nắm bắt những sự kiện KeyDown tab như mong đợi.

Tôi không biết tại sao điều này lại xảy ra. Phải là một lỗi trong jquery accordion hoặc jquery validate.

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