Я знаю, что расширенные текстовые поля в HTML являются чем-то вроде минного поля, но я надеюсь, что эта конкретная ситуация не будет слишком сложной. Мне нужно текстовое поле, которое пользователь не может отформатировать, но с помощью сценариев я могу добавить в него небольшое форматирование (чтобы текстовая область не работала).
Моей первой мыслью было, что я мог бы использовать contentEditable
, и если у пользователя нет панели инструментов, он не может ничего сделать, но все равно есть комбинации Ctrl + B, Ctrl + I и т. Д. Итак, я сделал это:
ctrlHandler = function (event) {
event.preventDefault();
};
this.keydown(function (event) {
if (event.ctrlKey) {
$(this).bind('keypress', ctrlHandler);
}
});
this.keyup(function (event) {
if (event.ctrlKey) {
$(this).unbind('keypress', ctrlHandler);
}
});
Таким образом, когда клавиша Ctrl нажата (keydown
), обработчик событий привязывается к нажатию клавиши, что предотвращает использование по умолчанию, а когда он освобождается, обработчик событий не связывается. Умно, а? (Я бы поработал, как обрабатывать комбинации вырезать / копировать / вставить и т. Д. Позже.) При этом обработчик событий привязывается правильно, но event.preventDefault()
на самом деле не предотвращает использование по умолчанию! Текст выделен жирным шрифтом / курсивом / подчеркнут, как если бы я ничего не делал. Изменение форматирования, кажется, происходит до того, как сработает событие. Использование keydown
или keyup
вместо keypress
также не работает. Кто-нибудь может придумать другой (кросс-браузерный) подход или как заставить этот работать?