Як відключити кнопку HTML за допомогою JavaScript?


185

Я читав, що ви можете відключити (зробити фізичне не натискання) кнопку HTML просто додавши disableдо її тегу, але не як атрибут, як описано нижче:

<input type="button" name=myButton value="disable" disabled>

Оскільки цей параметр не є атрибутом, як я можу додати це динамічно через JavaScript, щоб відключити попередньо ввімкнути кнопку?

Відповіді:


274

Оскільки цей параметр не є атрибутом

Це атрибут.

Деякі атрибути визначаються як булеві, а значить, ви можете вказати їх значення та залишити все інше. тобто замість disabled = " disabled ", ви включаєте лише жирну частину. У HTML 4 слід включити лише жирну частину, оскільки повна версія позначена як функція з обмеженою підтримкою (хоча це менш вірно зараз, коли написано специфікація).

Станом на HTML 5, правила змінилися, і тепер ви включаєте лише ім'я, а не значення. Це не має жодної практичної різниці, оскільки ім’я та значення однакові.

Властивість DOM також називається disabledі логічна змінна , яка приймає trueабо false.

foo.disabled = true;

У теорії ви можете також foo.setAttribute('disabled', 'disabled');і foo.removeAttribute("disabled"), але я не став би довіряти це з більш старими версіями Internet Explorer (який , як відомо , баггі , коли мова йде setAttribute).


Чи було б сенсом робити і те, і інше, змінювати властивість і встановлювати атрибут чи це просто зайвий звіт?
v010дя

Що fooв foo.disabled = true;? Це ідентифікатор цієї кнопки?
стек

@stack - змінна, що містить посилання на елемент, зібраний будь-якими засобами (наприклад, querySelector)
Quentin

146

відключити

document.getElementById("btnPlaceOrder").disabled = true; 

для того, щоб

document.getElementById("btnPlaceOrder").disabled = false; 

3
Чомусь це спрацювало для мене, хоча й $('#btnPlaceOrder').disabled = false;ні.
levininja

4
Я використовував $('#btnPlaceOrder')[0].disabled = falseяк селектор jquery, здається, повертає масив. Похити плечима.
Холодно

6
jquery! == javascript. jquery повертає селектор, схожий на масив.
AnilRedshift

@levininja, Chilly - $ ('# btnPlaceOrder'). prop ('вимкнено', помилково);
Dominik Späte

22

Це атрибут, але булевий (тому йому не потрібно імені, а лише значення - я знаю, це дивно). Ви можете встановити еквівалент властивості у Javascript:

document.getElementsByName("myButton")[0].disabled = true;

2
Йому потрібно значення, це ім'я, яке воно не потребує. (Дивно, але правда).
Квентін

1
@David: Я пам’ятаю, що читав це раніше, виправлено. Це справді дивно, і, напевно, було б більше сенсу, якби підкреслювачі синтаксису його правильно вшанували :-)
Енді Е


9

Офіційний спосіб встановити disabledатрибут на HTMLInputElementтакий:

var input = document.querySelector('[name="myButton"]');
// Without querySelector API
// var input = document.getElementsByName('myButton').item(0);

// disable
input.setAttribute('disabled', true);
// enable
input.removeAttribute('disabled');

Хоча відповідь @ kaushar достатня для включення та відключення HTMLInputElementі, ймовірно, краща для сумісності між браузером через історичну помилку IE setAttribute, вона працює лише тому, що Elementтінь властивостейElement властивості. Якщо властивість встановлено, то DOM використовує значення властивості за замовчуванням, а не значення еквівалентного атрибута.

Існує дуже важлива різниця між властивостями та атрибутами. Приклад справжнього HTMLInputElement властивості наведено input.valueнижче, а нижче показано, як працює затінення:

var input = document.querySelector('#test');

// the attribute works as expected
console.log('old attribute:', input.getAttribute('value'));
// the property is equal to the attribute when the property is not explicitly set
console.log('old property:', input.value);

// change the input's value property
input.value = "My New Value";

// the attribute remains there because it still exists in the DOM markup
console.log('new attribute:', input.getAttribute('value'));
// but the property is equal to the set value due to the shadowing effect
console.log('new property:', input.value);
<input id="test" type="text" value="Hello World" />

Ось що означає говорити, що властивості тіні атрибути. Ця концепція стосується також успадкованих властивостей prototypeланцюга:

Я сподіваюся, що це вияснює будь-яку плутанину щодо різниці між властивостями та атрибутами.


5

Це ще атрибут. Налаштування:

<input type="button" name=myButton value="disable" disabled="disabled">

... діє.


1
Дійсно, але специфікація говорить, що слід уникати синтаксису: w3.org/TR/html4/appendix/notes.html#hB.3.3
Квентін

2
Усі браузери шукають invalid = "disabled", я знаю, що специфікація скаже, щоб цього уникнути, але у мене ніколи не було проблем із налаштуванням disabled = "disabled" або перевірено = "перевірено" або вибрано = "selected" ... Просто не " t do disabled = "true" ... це визнають лише деякі браузери
Bob Fincheimer

Очевидно, що не всі браузери це підтримують - специфікація не була б такою явною, якби не. Вони просто більше не є загальним для використання.
Квентін

1
До речі, у запитанні сказано: "як я можу додати це динамічно через JavaScript"
Квентін

Звичайно, але питання продовжує говорити про те, що інвалід не є атрибутом. Моя відповідь полягає в тому, щоб розвіяти це і сказати, що ви можете використовувати це як атрибут. Ви також можете використовувати властивість DOM.
Олі


3

Я думаю, що найкращим способом може бути:

$("#ctl00_ContentPlaceHolder1_btnPlaceOrder").attr('disabled', true);

Працює чудовий крос-браузер.


4
це має бути prop, ні attr.
Антті Хаапала

1
питання шукає рідне js рішення
behradkhodayar

0
<button disabled=true>text here</button>

Ви все ще можете використовувати атрибут. Просто використовуйте атрибут "вимкнено" замість "значення".


Це disabled="disabled"чи просто disabled. Будь-яке значення рядка еквівалентно "disabled", включаючи disabled="true"та disabled="false".
користувач4642212
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.