2012-01-20 33 views
23

Tôi đang cố gắng đặt keyCode trên đối tượng sự kiện được gửi đi.Bàn phímEvent trong Chrome, mã phím là 0

Khi nhấp vào nút, sự kiện được nâng lên trên điều khiển hộp văn bản để mô phỏng sự kiện keydown. Sự kiện được nâng lên thành công, nhưng keyCode là 0. Tôi cần gửi đối tượng sự kiện với mã khóa chính xác tới hộp văn bản. Tôi đã sử dụng mã từ here.

Cách đặt giá trị keyCode trong sự kiện được gửi đi?

<html> 
    <head>  
    </head> 
    <body> 
     <input type="button" id="btn" value="Click"></input> 
     <input type="text" id="txt"></input> 
     <script> 
      document.getElementById('btn').addEventListener("click", btnClick); 
      document.getElementById('txt').addEventListener("keydown", txtKeydown);   

      function btnClick(e) { 
       var txt = document.getElementById('txt');    

       var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) { 
        var e = document.createEvent("KeyboardEvents"); 
        e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1)); 
        e.keyCode = 83; 
        e.charCode = 0; 
        target.dispatchEvent(e); 
       }; 

       var canceled = !dispatchKeyboardEvent(txt, 
       'keydown', true, true, // type, bubbles, cancelable 
       window, // window 
       's', // key 
       0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick 
       false, false, false); // Ctr, Alt, Shift 
      } 

      function txtKeydown(e) { 
       console.dir(e); 
       console.log(e.keyCode); 
      } 

     </script> 
    </body> 
</html> 
+0

Có một công việc rất thông minh cho việc này, vui lòng xem: http://stackoverflow.com/questions/10455626/keydown-simulation-in-chrome-fires-normally-but-not-the-correct-key/10520017 # 10520017 Điều này sẽ cho phép bạn thiết lập các thuộc tính bạn cần, và gửi một sự kiện keyup/down. Mã mẫu được bao gồm. – Orwellophile

Trả lời

9

Có vẻ như đã một chút kể từ khi bạn hỏi câu hỏi này để có thể bạn đã tìm thấy câu trả lời cho câu hỏi của mình. Trong trường hợp bạn không mặc dù, có một bug in Webkit như đã được chỉ ra trong this SO question gây ra mã khóa luôn luôn là 0. Rõ ràng là không có nhiều bạn có thể làm cho đến khi họ sửa chữa nó. Đáng buồn thay nó không giống như bất cứ ai thực sự làm việc trên nó mặc dù. Nó không phải là câu trả lời bạn muốn nghe, nhưng nó thực sự là câu trả lời duy nhất mà bất cứ ai cũng có thể cung cấp cho bạn ngay bây giờ.

34

Tôi ngạc nhiên rằng lỗi này đã được đặt ở đó cho các lứa tuổi. Dường như có một giải pháp thay thế bằng các sự kiện chung chung. Đây là bản demo: http://jsbin.com/awenaq/3

+9

Lỗi này * vẫn * tồn tại! –

+0

@Philip bạn có thể giải thích bản demo không? Dường như bạn đã nhập mã phím cho các nút được nhấn, đây không phải là cách giải quyết cho chrome không thể cho biết phím nào được nhấn. – ProblemsOfSumit

+0

@Sumit: bản trình diễn cho thấy cách sử dụng sự kiện chung thay vì KeyboardEvent khi ** kích hoạt thủ công ** sự kiện. –

0

Tôi đã gặp phải sự cố tương tự với các thiết bị Android như, Sony Xperia và Thiết bị HTC. Vì vậy, tôi tìm thấy giải pháp thay thế: vui lòng tham khảo câu trả lời của tôi cho câu hỏi này KeyCode Returns 0 Always

0

Nó không phải là một lỗi ... tính năng này đang được đào thải ra ngoài, không dùng nữa, cấm, whateva' tên sẽ được ngày mai ... Bạn không thể dựa vào tính năng này để làm việc lâu dài. ... và là một nguy cơ bảo mật mở rộng ... tìm cách khác để làm những gì bạn đang cố gắng làm. Tham khảo thông số kỹ thuật của MOZILLA và bạn sẽ thấy BANN RED BANNER BIG BADER cảnh báo để tránh điều này như bệnh dịch hạch. Họ sẽ không sửa chữa nó, bằng cách trả lại 0 họ một cách hiệu quả ngăn chặn sự chảy máu mà không thay đổi mã ngoại trừ ở một nơi mà nó luôn luôn hạ gục các keyCode để 0.

0

Nếu bạn có jQuery:

$.Event(event, { keyCode: 13 });

Đây là mục đích sử dụng.
Source.

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