JavaScript kullanarak HTML düğmesini nasıl devre dışı bırakabilirim?


186

Bir HTML düğmesini yalnızca disableetiketine ekleyerek devre dışı bırakabileceğinizi (fiziksel olarak tıklanamaz hale getirebileceğinizi) okudum , ancak aşağıdaki gibi bir özellik olarak değil:

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

Bu ayar bir öznitelik olmadığından, daha önce etkinleştirilmiş bir düğmeyi devre dışı bırakmak için bunu JavaScript aracılığıyla nasıl dinamik olarak ekleyebilirim?

Yanıtlar:


274

Bu ayar bir özellik olmadığından

Bu bir özelliktir.

Bazı özellikler boolean olarak tanımlanır, yani değerlerini belirtebilir ve diğer her şeyi dışarıda bırakabilirsiniz. ie devre dışı = " devre dışı " yerine, yalnızca kalın kısmı dahil edersiniz. HTML 4'te, tam sürüm sınırlı desteğe sahip bir özellik olarak işaretlendiğinden yalnızca kalın kısmı dahil etmelisiniz (bu, spesifikasyon yazıldığı zamandan daha az doğrudur).

HTML 5'ten itibaren kurallar değişti ve şimdi değeri değil, yalnızca adı dahil ediyorsunuz. Bu pratik bir fark yaratmaz çünkü isim ve değer aynıdır.

DOM özelliği de denir disabledve alan bir boolean trueya false.

foo.disabled = true;

Teorik olarak da yapabilirsiniz foo.setAttribute('disabled', 'disabled');ve foo.removeAttribute("disabled"), ancak Internet Explorer'ın eski sürümleriyle (buna gelince kötü niyetli adamcağız setAttribute) buna güvenmem .


Her ikisini de yapmak, özelliği değiştirmek ve özniteliği ayarlamak mantıklı mı yoksa sadece aşırıya kaçmak mı?
v010dya

Ne var fooiçinde foo.disabled = true;? Bu düğmenin kimliği mi?
yığın

@stack - İstediğiniz herhangi bir yöntemle toplanan öğeye referans tutan bir değişken (örn. querySelector)
Quentin

146

devre dışı bırakmak

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

etkinleştirmek

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

3
Bazı nedenlerden dolayı bu benim için işe yaramadı $('#btnPlaceOrder').disabled = false;.
levininja

4
Ben $('#btnPlaceOrder')[0].disabled = falsejquery seçici bir dizi döndürmek gibi kullanılır . Omuz silkme.
Chilly

6
jquery! == javascript. jquery dizi benzeri bir seçici döndürür.
AnilRedshift

@levininja, Chilly - $ ('# btnPlaceOrder'). prop ('devre dışı', yanlış);
Dominik Späte

22

Bu bir niteliktir, ama boole bir özelliktir (bu yüzden bir isme ihtiyaç duymaz, sadece bir değere sahiptir - Biliyorum, garip). Özellik eşdeğerini Javascript'te ayarlayabilirsiniz:

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

2
Bir değere ihtiyacı var, ihtiyaç duymadığı isim. (Garip ama gerçek).
Quentin

1
@David: Bunu daha önce okuduğumu hatırlıyorum, düzeltildi. Gerçekten tuhaftır ve sözdizimi vurgulayıcıları doğru bir şekilde onurlandırırsa muhtemelen daha mantıklı olur :-)
Andy E


9

Özelliği disabledbirHTMLInputElement şudur:

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'ın yanıtı , bir etkinleştirmek ve devre dışı bırakmak için yeterli olsa da , IE'ninHTMLInputElement tarihsel olarak buggy olması nedeniyle tarayıcılar arası uyumluluk için muhtemelen tercih edilebilirsetAttribute , ancak yalnızca Elementözellikler gölge Elementnitelikleri nedeniyle çalışır . Bir özellik ayarlanmışsa, DOM, eşdeğer özelliğin değeri yerine varsayılan olarak özelliğin değerini kullanır.

Özellikler ve nitelikler arasında çok önemli bir fark vardır. Gerçek bir örneği HTMLInputElement özelliği olan input.valueve aşağıda nasıl gölgeleme çalıştığını gösterecektir:

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" />

Gölge niteliklerinin özellikleri olduğunu söylemek budur. Bu kavram, prototypezincirdeki kalıtsal özellikler için de geçerlidir :

Umarım bu özellik ve nitelikler arasındaki farkla ilgili herhangi bir karışıklığı açıklar.


5

Hala bir özellik. Ayarlama:

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

... geçerlidir.


1
Geçerli, ancak teknik özellik sözdiziminden kaçınılması gerektiğini söylüyor: w3.org/TR/html4/appendix/notes.html#hB.3.3
Quentin

2
Tüm tarayıcılar devre dışı = "devre dışı" arayın, spec önlemek için söylüyorum biliyorum, ama ben hiçbir zaman devre dışı ayarlanan = "devre dışı" veya kontrol = "kontrol" veya seçilmiş = "seçili" ... sadece don ' t do devre dışı = "true" ... bunu yalnızca bazı tarayıcılar tanıyacak
Bob Fincheimer

Açıkçası tüm tarayıcılar bunu desteklemez - teknik özellikler olmasaydı bu kadar açık olmazdı. Artık ortak kullanımda değiller.
Quentin

1
BTW, soru "bunu JavaScript aracılığıyla dinamik olarak nasıl ekleyebilirim" diyor
Quentin

Tabii ama engelli özniteliğin olmadığı hakkında konuşmaya devam ediyor. Cevabım bunu çözmek ve bir özellik olarak kullanabileceğinizi söylemekle ilgilidir. Sen olabilir ayrıca DOM özelliğini kullanın.
Oli

4

B olarak adlandırılan düğme nesneniz varsa: b.disabled=false;


3

Bence en iyi yol şu olabilir:

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

İyi bir çapraz tarayıcı çalışır.


4
öyle olmalı prop, değil attr.
Antti Haapala

1
soru yerli js çözüm arıyor
behradkhodayar

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

Yine de bir özellik kullanabilirsiniz. 'Değer' yerine 'devre dışı' özelliğini kullanın.


Bu var disabled="disabled"ya da sadece disabled. Herhangi bir dize değeri ve "disabled"dahil olmak üzere eşdeğerdir . disabled="true"disabled="false"
kullanıcı4642212
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.