2015-03-04 1 views
3

У меня есть код прослушивания KeyDown, и я хочу, чтобы отменить или заблокировать ключ в зависимости от некоторых вещей (например, текст длины, только цифры и т.д.)Проблемные 186 и коды клавиш 222, как поймать их

Когда ты нажмите `или '(коды клавиш 186 и 222) хром переходит в состояние псевдожидкости, он прослушивает второй ключ, а затем отображает один или два символа. (У меня есть Win XP, испанский клавиатуры, хром последняя версия)

Например 186 + 80 дает: `р >> 2 символов но 186 + 79 дает: ò >> 1 персонаж

У меня есть возвращение код внутри средства управления событиями, чтобы проверить или не зацепить ключ.

Моя проблема, я не знаю, как отменить это 2 символа.

Вопрос: Есть ли способ обнаружить это поведение? Любой способ получить «реальный» или «конечный» характер?

Может быть, идея может заключаться в проверке значения текста? Но когда и как? Как только вы вернетесь, текст обновляется, и, возможно, setTimeout может быть исправлением ....?

Я немного испорчен. Кроме того, я подозреваю, что все зависит от S.O., country cfg и т. Д.

Некоторые идеи будут оценены.

function keypressed (event) { 
    // ------------------------------------------------ 
    var lock=false,chrTyped, chrCode=0, evt=event?event:event;  
    if (evt.which!=null) chrCode = evt.which; else chrCode = evt.keyCode; 
    if (chrCode==0) chrTyped = 'SPECIAL KEY'; 
    else chrTyped = String.fromCharCode(chrCode); 
    // --------------------------------------------------- 
    //special keys & backspace [\b] work as usual: 
    if (chrTyped.match(/[\b]|SPECIAL/)) return true; 
    if (evt.altKey || evt.ctrlKey || chrCode<28) lock=false; 

    if (lock) 
    { if (evt.preventDefault) evt.preventDefault(); 
     evt.returnValue=false; 
     return false;   
    } 
    else 
    if (keys_used.length==0) return true; 
} 
+0

Вы читаете значение из определенного ввода текста или получаете нажатия клавиш на всей странице? –

+0

@eskimo, да (конечно) конкретный ввод текста – civiltomain

+0

Попробуйте [эта скрипка (она использует jQuery хотя)] (http://jsfiddle.net/bj077ftm/) –

ответ

2

Chrome на самом деле делает свою работу комбинации клавиш (Alt + клавиша Ctrl + Key, Shift + Key, и т.д.) на 'keyup' вместо 'keydown', как вы ожидаете. Итак, когда вы слушаете событие 'keydown', это слишком рано, а 'keypress' - слишком поздний этап.

Вы должны поймать событие 'keyup' и выполнить свою настройку там.

+0

Интересно, но мне нужно написать больше кода, чтобы контролировать поведение, которое я хочу. Например, если вы хотите отменить любой ключ, отличный от числовой цифры, в середине текста ввода. Вместо простого «return false» на кодовом экране. Спасибо, в любом случае. – civiltomain

0

Путь состоит в том, чтобы написать два eventlisteners.

Первый, кто прослушает keydown и отменит при необходимости.

Во-вторых, прислушайтесь к клавишам, чтобы узнать, есть ли у вас 2 или более неконтролируемых символа и удалите их, если необходимо. Вы немного мигаете, но я думаю, что другого пути нет

Смежные вопросы