tl; dr: поддержка выбора и копирования текста в отключенном поле ненадежна;вместо этого используйте атрибут readonly
или элемент, отличный от input
, например <span>
, если эта функциональность необходима.Используйте JavaScript, чтобы изменить поведение ввода readonly
, чтобы предотвратить нежелательное поведение, такое как возврат назад страницы, когда кто-то нажимает клавишу backspace
, когда ввод readonly
имеет фокус.
* ОБНОВЛЕНИЕ: 2018.12.24
Спецификация изменилась с тех пор, как этот ответ был первоначально опубликован (спасибо Wrightboy за указание на это);теперь он включает следующее предупреждение относительно отключенных полей:
Любое другое поведение, связанное с взаимодействием пользователя с отключенными элементами управления, например, может ли текст быть выделен или скопирован, не определено в этом стандарте.
- https://html.spec.whatwg.org/multipage/input.html#the-readonly-attribute
Отключенные поля по-прежнему не могут ни фокусировать, ни щелкать события.
Поскольку стандарт не определяет, может ли быть текст в отключенных элементах управлениявыбран или скопирован, и поскольку хотя бы один крупный браузер не поддерживает эту функцию, вероятно, лучше избегать такого поведения.
Оригинальный ответ
Этоожидаемое поведение для отключенного поля (по состоянию на исходную дату этого ответа).IE и Chrome великодушны, но Firefox ведет себя должным образом.
Если вы хотите, чтобы пользователь не мог изменить значение поля, но вы все же хотите, чтобы они могли его читать и / или копироватьэто значение, тогда вы должны использовать атрибут readonly
.Это позволит им установить фокус на элемент (необходимый для копирования), а также получить доступ к полю с помощью кнопки tab
.
Если вас беспокоит случайное нажатие пользователем кнопки возврата назад в поле только для чтенияи заставляя браузер перейти назад на страницу, вы можете использовать следующий код для предотвращения такого поведения:
document.addEventListener("DOMContentLoaded", function() {
var inputs = document.querySelectorAll('[readonly]');
for(var i=0; i < inputs.length; i++){
inputs[i].addEventListener('keydown', function(e){
var key = e.which || e.keyCode || 0;
if(key === 8){
e.preventDefault();
}
})
}
});
<input value="Hello World" readonly=readonly />