Як відключити тип введення = текст?


123

Я хочу відключити запис у полі введення типу textза допомогою JavaScript, якщо це можливо. Поле введення заповнюється з бази даних; тому я не хочу, щоб користувач міняв його значення.

Відповіді:


172

Якщо ви знаєте це, коли сторінка надається, це звучить так, як у вас, тому що база даних має значення, краще відключити її, коли вона відображається замість JavaScript. Для цього просто додайте readonlyатрибут (або disabled, якщо ви хочете також видалити його з подання форми) до пункту <input>, як це:

<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />

81
Я не знаю, чому це отримує голоси, він не відповідає на питання. Ми очікували відповіді на javascript.
Софі

3
@Sophie - це найбільш правильний спосіб для запитувача зробити це залежно від ситуації, можливо, зміна заголовка в порядку.
Нік Крейвер

6
відключений режим запобігає подіям клацання у полі введення, лише читання не відбувається. фій.
кнутоле

Щоб отримати поле введення "лише для читання" в LOOK, як поле "вимкнено", встановіть "style =" color: grey; background-color: # F0F0F0; "'. (це був коментар до цієї відповіді )
Джейк Торонто

2
Майте на увазі, що браузери можуть ігнорувати атрибут "вимкнено" або "лише для читання", і цього методу не слід покладатися на надійне запобігання оновленню даних ... якщо серверний код, який обробляє форму, все одно прийме значення з цього поля та оновити його, кожен, хто має достатньо кмітливості для створення власної форми, може обійти це "відключення" ... це для зручності користувальницького інтерфейсу лише у надійному середовищі. Реальний спосіб запобігти це - за допомогою логіки на стороні сервера.
Аарон Валентен

206
document.getElementById('foo').disabled = true;

або

document.getElementById('foo').readOnly = true;

Зауважте, що readOnlyв камері Firefox (магія) має бути у camelCase.

Демонстрація: https://jsfiddle.net/L96svw3c/ - дещо пояснює різницю між disabledі readOnly.


3
Це працювало для мене. Версія Jquery - $ ('input'). Prop ('вимкнено', правда)
Daniel Sun Yang,

Я запізнююсь на сім років - але чи є семантична різниця між цими двома в 2017 році?
Жуль

2
Ви зовсім не запізнюєтесь, магія все ще є (: Я не пам’ятаю, на яких платформах я тестував тоді, але сьогодні readonly(малі регістри) все ще не працює у Firefox 52 на Ubuntu - має бути справа верблюда.
hudolejev

Чому це не працює для мене? Я створив inputелемент id="gate"і спробую ваш код, який, здається, не працює для мене ...
Гнів Волдеморта

21

Якщо дані заповнені з бази даних, ви можете врахувати не використовувати <input>тег для їх відображення. Тим не менш, ви можете відключити його прямо в тезі:

<input type='text' value='${magic.database.value}' disabled>

Якщо вам потрібно пізніше відключити його за допомогою Javascript, ви можете встановити атрибут "вимкнено":

document.getElementById('theInput').disabled = true;

Причина, по якій я пропоную не відображати значення як, <input>полягає в тому, що, на мій досвід, це викликає проблеми з компонуванням. Якщо текст довгий, то в <input>користувачеві потрібно буде спробувати прокрутити текст, що не те, що зазвичай здогадуються люди. Якщо ви просто кинете його на <span>щось або щось, у вас є більш гнучкість у стилі.


3
Майте на увазі, що інваліди можуть зробити текст майже нечитабельним у деяких браузерах. Можливо, вам буде краще з атрибутом readonly, наприклад, <input type = "text" value = "foo" readonly>
Оллі Ходжсон

7

Ви також можете за допомогою jquery:

$('#foo')[0].disabled = true;

Робочий приклад:

$('#foo')[0].disabled = true;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" placeholder="placeholder" value="value" />


1
@Chani Poz Ви викликаєте нативний jjs-сетер на об’єкт jquery, це призведе до помилки. $ ('# foo') [0] .disabled = true або $ ('# foo'). get (0) .disabled = true виконає роботу
Arek Kostrzeba

6

Отримайте посилання на поле введення, як вам подобається (наприклад document.getElementById('mytextbox')) та встановіть його readonlyвластивість true:

myInputBox.readonly = true;

Крім того, ви можете просто додати цю властивість inline (не потрібен JavaScript):

<input type="text" value="from db" readonly="readonly" />

Якщо ви пишете HTML (на відміну від XHTML), це буде <input type = "text" value = "from db" readonly>
Оллі Ходжсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.