Как написать функцию JavaScript, которая позволяет использовать нередактируемое текстовое поле?

Мне нужно иметь текстовое поле ввода, в котором я могу щелкнуть, и курсор начнет мигать, но пользователь не может изменить какой-либо текст внутри него.

Я пытался использовать атрибуты «только для чтения» или «отключено», но они не позволяют курсору находиться внутри текстового поля. Итак, я думал о решении для реализации в JavaScript в обычном текстовом поле. Есть ли плагин, который уже делает это? Как мне это реализовать?

РЕДАКТИРОВАТЬ: Спасибо за все ответы, но я хотел сделать текст типа textarea/input нередактируемым, но в то же время доступным для выбора. Нажатие Ctrl + A внутри текстового поля не работает. Можно ли получить измененное значение и старое значение и сравнить их, а затем вернуть false, если значения разные, но во всех остальных случаях вернуть true, чтобы Ctrl + A, Shift + end и т. д. работают комбинации?


person YD8877    schedule 09.08.2011    source источник


Ответы (2)


Что-то вроде этого:

<textarea onkeydown="javascript:return false;"></textarea>

бы сделать свое дело. (jsfiddle)

Вы также можете сделать это во время выполнения, если хотите:

<textarea class="readonly"></textarea>

с

$(".readonly").keydown(function() false);

Обратный вызов onkeydown фиксирует события нажатия клавиш и отменяет их с помощью return false;.

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

Ваша функция обратного вызова может принимать или отменять события в зависимости от типа нажатия клавиши. Например, чтобы включить только ctrl-a и ctrl-c (с jQuery):

function keydown(e) {
  if(!e.ctrlKey) return false; // Cancel non ctrl-modified keystrokes
  if(e.keyCode == 65) return true;// 65 = 'a'
  if(e.keyCode == 67) return true;// 67 = 'c'
  return false;
}
person slaphappy    schedule 09.08.2011
comment
Спасибо за ваш ответ, я отредактировал свой вопрос, добавив более конкретное требование. - person YD8877; 09.08.2011
comment
В этом случае вы можете вернуть true или false в зависимости от того, какая клавиша была нажата для принятия или отмены событий. Для получения дополнительной информации см. MDN: developer.mozilla.org/en/DOM/event.keyCode< /а> - person slaphappy; 09.08.2011

Вы не можете полагаться на отключение <textarea> в качестве пользовательского ввода, так как тривиально удалить любой вид отключения HTML или javascript с помощью firebug или других инструментов. Помните, что формы не ограничены полями, которые вы им даете, любой может отправить любые данные на страницу.

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

person Dunhamzzz    schedule 09.08.2011