Отличие обычных символов и половинных символов при нажатии клавиши

Мы разветвили экспериментальный визуальный редактор Mediawiki. Этот редактор WYSIWYM работает со скрытой текстовой областью и представлением содержимого в DOM. Когда вы фокусируете представление, фокус передается текстовой области, и представление прослушивает событие нажатия клавиши, чтобы добавить каждый введенный символ в содержимое, а затем очистить значение текстовой области.

Проблема возникает только с половинными символами в Mac OS X. Если вы набираете ^ или ¨ или любые символы, для которых требуется напечатать второй символ, срабатывает событие нажатия клавиши. Таким образом, когда пользователь хочет «ê», он набирает «^». Просмотрите значение textarea ('^') и очистите значение textarea. Затем пользователь набирает «е». В представлении отображается '^e'. И в качестве бонуса, в Chrome (в этом случае Firefox лучше) пользователь никогда не сможет ввести какие-либо акценты на текущей странице в любых вводах без перезагрузки окна.

Есть ли способ отличить настоящего персонажа от наполовину?


person user1412772    schedule 23.05.2012    source источник
comment
Я только что узнал, что у полуключа есть настоящее имя! Это называется Мертвый Ключ!   -  person user1412772    schedule 23.05.2012
comment
Связано: phabricator.wikimedia.org/T52631#844225 , phabricator.wikimedia.org/T51569   -  person Nemo    schedule 06.04.2015


Ответы (2)


Просто нашел обходной путь. Прослушивая событие keyup, мертвые ключи возвращают свойство keyIdentifier, установленное на Unidentified.

So :

keyuphandler = function(e)
{
    if (e.keyIdentifier === 'Unidentified')
    {
        return;
    }
    doSomething();
}
person user1412772    schedule 24.05.2012

Вы получаете символ из события нажатия клавиши или читаете его из текстовой области? Я только что попробовал это с полем ввода, и его значение не изменилось при первом нажатии кнопки ^. Тем не менее, я использую окна. В крайнем случае, очевидно, будет по-другому обрабатывать эти изменяющие нажатия клавиш. Это может стать несколько сложным, если вы стремитесь поддерживать комбинации клавиш, такие как alt+654. Я попробую еще раз на своем Mac, как только вернусь домой после работы.

person Axel Wilczek    schedule 23.05.2012
comment
Возможно, вы захотите рассмотреть возможность использования обычного поля ввода и копирования его содержимого в DOM после того, как пользователь нажмет клавишу ввода. - person Axel Wilczek; 23.05.2012
comment
Редактор прослушивает событие keydown и смотрит на textarea.value. У меня было несколько попыток с keydown, keyup, keypress и value и e object. Я не нашел ничего, что отличало бы ключи… - person user1412772; 23.05.2012
comment
И все отлично работает на Windows и Linux. Не работает только Mac OS X :( - person user1412772; 23.05.2012