Tôi đang chiến đấu với một hành vi javascript rất lạ trên tiện ích con giao diện người dùng jQuery mà tôi đang cố gắng khắc phục. IE7 (win XP), jQuery 1.2.6 (có, đó là phiên bản cũ).IE e.keyCode - Làm cách nào để phân biệt giữa ký hiệu và mũi tên lên?
Tiện ích con là hộp tổ hợp, nắm bắt các sự kiện bàn phím và có các hành vi đặc biệt cho các phím mũi tên.
Khi tôi cố gắng nhập ký tự "&" vào trường nhập flexbox, tôi nhận được hành vi lạ.
Các flexbox có một số mã như:
//initialization
$myInputElement.keypress($.flexbox.process_key);
$.flexbox.process_key = function process_key(e) {
$.flexbox.flexboxFromInput(this).processKey(e);
return true;
};
//on the flexbox object's prototype:
...
processKey: function processKey(e) {
var mod = 0;
if (typeof (e.ctrlKey) !== 'undefined') {
if (e.ctrlKey) mod |= 1;
if (e.shiftKey) mod |= 2;
} else {
if (e.modifiers & Event.CONTROL_MASK) mod |= 1;
if (e.modifiers & Event.SHIFT_MASK) mod |= 2;
}
...
switch (e.keyCode) {
case 38: // up
this.prevResult();
break;
case 40: // down
if (this.getCtr().is(':visible')) this.nextResult();
else this.flexboxDelay(true);
break;
...etc.
}
}
...
Khi tôi giới thiệu một tuyên bố khai thác gỗ, những gì tôi thấy là nhấn "&" (shift + 7) tạo ra ba sự kiện nhấn phím:
INFO: Flexbox> processKey, keyCode=16, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=55, ctrl=false, shift=true
INFO: Flexbox> processKey, keyCode=38, ctrl=false, shift=true
Rõ ràng, mã phím 38 là cả phím mũi tên lên và mã ASCII cho dấu và ??
Khi tôi đang viết điều này, tôi đã phát hiện phím bấm là "shift + 7" (mã phím 55) để coi phím đó là phím dấu và, sau đó đặt một số loại cờ để bỏ qua lần nhấn phím tiếp theo (đó là 38). Điều này có vẻ như một hack khủng khiếp.
Có ai có cách nào tốt hơn để phân biệt giữa các ký tự đặc biệt như "&" và các phím mũi tên trong IE không?
Tôi nghĩ rằng nó nói khối lượng về IE rằng mã phím cho các phím mũi tên tạo thành khuôn mặt buồn tức giận:% & '( (hoạt động tốt hơn trong phông chữ nhập văn bản nhận xét) – RMorrisey