Javascript kullanarak giriş öğesine devre dışı bırakılmış öznitelik ekle


141

Bir giriş kutusu var ve ben devre dışı bırakılmasını istiyorum ve aynı zamanda formu taşıma sırasında sorunları önlemek için gizlemek istiyorum.

Şimdiye kadar girdimi gizlemek için aşağıdaki kod var:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide();
});

Sonuç olarak gizlenen girdi:

<input class="longboxsmall" type="text" />

Engelli niteliğini girdiye nasıl ekleyebilirim?

Yanıtlar:


306

$("input").attr("disabled", true); itibariyle ... Artık bilmiyorum.

Aralık 2013 ve size ne söyleyeceğimi bilmiyorum.

Önce hep öyleydi .attr(), sonra hep öyleydi .prop(), bu yüzden buraya geldim cevabı güncelledim ve daha doğru hale getirdim.

Sonra bir yıl sonra jQuery tekrar fikirlerini değiştirdi ve bunu takip etmek bile istemiyorum.

Uzun lafın kısası, şu andan itibaren, bu en iyi cevap: "ikisini de kullanabilirsiniz ... ama duruma göre değişir."

Bunun yerine bu yanıtı okumalısınız: https://stackoverflow.com/a/5876747/257493

Ve bu değişiklik için sürüm notları buraya dahil edilmiştir:

Değeri almak / ayarlamak için .attr () veya .prop () kullanılmamalıdır. Bunun yerine .val () yöntemini kullanın (.attr ("değer", "somevalue" kullanılmasına rağmen 1.6'dan önce olduğu gibi)

Tercih Edilen Kullanım Özeti

.Prop () yöntemi, boolean öznitelikleri / özellikleri ve html'de bulunmayan özellikler (window.location gibi) için kullanılmalıdır. Diğer tüm öznitelikler (html'de görebileceğiniz özellikler) .attr () yöntemiyle değiştirilmeye devam edilebilir ve değiştirilmeye devam edilmelidir.

Başka bir deyişle:

".prop = doküman olmayan şeyler"

".attr" = belge öğeleri

... ...

Hepimiz burada API kararlılığı hakkında bir ders öğrenelim ...


3
Güncelleme metnini dikkat etmeme yetecek kadar büyük hale getirdiği için +1
Vael Victus

@VaelVictus Çok hızlı değil. Bunu yayınladıktan bir yıl sonra tekrar değiştirdiklerini söylediğim için üzgünüm ... ve bu cevabı unuttum. Bu yanıtı okuyun: stackoverflow.com/a/5876747/257493
Gizli

1
.Prop ve .attr arasındaki bu belge / belge dışı ayrım son derece yararlıdır ve bağlamı daha önce hiç bu kadar kısa ve öz bir şekilde çerçevelemiş görmemiştim. Çok takdir!
rakipsiz

51

Kaynaklarımdan çalışma kodu:

HTML DÜNYASI

<select name="select_from" disabled>...</select>

JS WORLD

var from = jQuery('select[name=select_from]');

//add disabled
from.attr('disabled', 'disabled');



//remove it
from.removeAttr("disabled");

2
Doğrudan Google'dan buraya gelen insanlar için bir not olarak jQuery :As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. To retrieve and change DOM properties such as the checked, selected, or disabled state of form elements, use the .prop() method
Erenor Paz

16

JQuery kullanıyorsanız, devre dışı bırakılmış özniteliği ayarlamanın birkaç farklı yolu vardır.

var $element = $(...);
    $element.prop('disabled', true);
    $element.attr('disabled', true); 

    // The following do not require jQuery
    $element.get(0).disabled = true;
    $element.get(0).setAttribute('disabled', true);
    $element[0].disabled = true;
    $element[0].setAttribute('disabled', true);

Ne olmuş $element.eq(0)[0].disabled = true;? :-P
qwertynl

1
Evet, bu benim için ileri, performansı artırmak için o kadar ileri gitmiyorum.
iConnor

+1. Her ne kadar biraz gereksiz olsa da. Eğer bir NodeList / eleman dizisi ile ilgilenecekseniz, bunları endekse göre seçmek saçmadır. Yineleme veya yalnızca ihtiyacınız olan öğeyi seçmek daha mantıklıdır.

13
$(element).prop('disabled', true); //true|disabled will work on all
$(element).attr('disabled', true); 
element.disabled = true;
element.setAttribute('disabled', true);

Yukarıdakilerin hepsi mükemmel şekilde geçerli çözümlerdir. İhtiyaçlarınıza en uygun olanı seçin.


1
JQuery gerektirmeyen bir çözüm sağladığınız için teşekkür ederiz.
Elias Zamaria

12

DOM öğesini alabilir ve devre dışı bırakılan özelliği doğrudan ayarlayabilirsiniz.

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').hide()[0].disabled = 'disabled';
});

veya birden fazla varsa each()hepsini ayarlamak için kullanabilirsiniz :

$(".shownextrow").click(function() { 
  $(this).closest("tr").next().show()
          .find('.longboxsmall').each(function() {
               this.style.display = 'none';
               this.disabled = 'disabled';
          });
});

5

Sadece jQuery attr()yöntemini kullanın

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled');

3
ve engelli durumu kullanarak.removeAttr('disabled');
ruhong

2

Soru JS ile nasıl yapılacağını sorduğumdan beri bir vanilya JS uygulaması sağlıyorum.

var element = document.querySelector(".your-element-class-goes-here");
// it's a good idea to check whether the element exists
if (element != null && element != undefined) {
  element.disabled = "disabled";
}

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.