JQuery kullanarak "devre dışı" özniteliği nasıl kaldırılır?


394

Önce girişleri, ardından etkinleştirmek için bir bağlantıyı tıklatmayı devre dışı bırakmam gerekiyor.

Şimdiye kadar denedim, ama çalışmıyor.

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

jQuery:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').removeAttr("disabled")
});


Bu beni gösteriyor trueve sonra falsegirdiler için hiçbir şey değişmiyor:

$("#edit").click(function(event){
   alert('');
   event.preventDefault();
   alert($('.inputDisabled').attr('disabled'));
   $('.inputDisabled').removeAttr("disabled");
   alert($('.inputDisabled').attr('disabled'));
});

2
Sorununu görmüyorum. Ne soruyorsun?
nicosantangelo

Soru ne? Hangi problemle karşı karşıya olduğunuzu kastediyorum
Satya Teja

7
Prop () - .prop ('devre dışı', yanlış) kullanın
Jay Blanchard

Sorununuz
çözüldüyse

sorun clic sonra devre dışı değil
fatiDev

Yanıtlar:


817

Her zaman kullanmak prop()jQuery kullanıldığında (neden için aşağıya bakınız) etkinleştirmek için bir yöntem ya da devre dışı elemanları.

Sizin durumunuzda:

$("#edit").click(function(event){
   event.preventDefault();
   $('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});

jsFiddle örneği burada.


Kullanım Neden prop()Kullanmak ne zaman attr()/ removeAttr()bunu yapmak için?

Temel olarak, prop()elde veya ayarlarken kullanılmalıdır özelliklerini (örneğin autoplay, checked, disabledve requireddiğerleri arasında).

Bunu kullanarak removeAttr(), disabledözniteliğin kendisini tamamen kaldırmış olursanız da prop(), yalnızca mülkün temel Boole değerini false olarak ayarlarsınız .

Eğer ne yapmak istediğinize iken edebilirsiniz kullanılarak yapılabilir attr()/ removeAttr(), onu anlamına gelmez gerektiğini yapılabilir (ve bu durumda olduğu gibi, garip / sorunlu davranışa neden olabilir).

Aşağıdaki alıntılar ( prop () için jQuery belgelerinden alınmıştır ) bu noktaları daha ayrıntılı olarak açıklamaktadır:

"Nitelikler ve özellikler arasındaki fark belirli durumlarda önemli olabilir. JQuery 1.6'dan önce, .attr() yöntem tutarsız davranışa neden olabilecek bazı öznitelikleri alırken bazen özellik değerlerini hesaba katmıştır. JQuery 1.6'dan itibaren, .prop() yöntem açıkça almak için bir yol sağlar özellik değerleri, .attr()öznitelikleri alır. "

"Özellikleri genellikle seri HTML özniteliği değiştirmeden DOM elemanının dinamik olmalarını etkilemez. Örnek olarak value girdi elemanı özelliği, disabledgiriş ve düğmelerin özelliği veya checkedbir onay özelliği. .prop()Metodu grubu için kullanılmalıdır disabledve checkedyerine .attr() yöntemi. .val()yöntem alma ve ayarlama için kullanılmalıdır value."


3
İnsanlar da tamamen sonları kirli checkedness bayrak, dayanacak bilmeli attrvs prop: işaret kutusu w3.org/TR/html5/forms.html#concept-input-checked-dirty iç jQuery hariç sihirli bir geçici çözüm.
Ciro Santilli 法轮功 at 病 六四 事件 法轮功

19
Hmm, .prop ("devre dışı", yanlış) bir düğmede benim için çalışmıyor gibi görünüyor - etikette 'devre dışı' niteliğini hiçbir değer olmadan bırakır.
UpTheCreek

3
@UpTheCreek de benim için çalışmıyordu. Ancak 'bu' maddesinde (her zamanki gibi) bir kapsam sorunu olduğunu keşfettim. Belirli bir durumda .prop()eleman tarafından işaret idam edildi this( this.prop("disabled", false)ama yanlış elemana bağlanması bir callback'inde içine olmanın ben ortak yapmak zorunda, var that = thisgeçici çözümü ile oynamak için çalışıyorum. .apply()/ .call()Çalışma değildi; Bilmiyorum console.log(this)this.prop(...)
Aramadan

3
Bu cevabı belge bölümüne geçmeye aday göstereceğim. Açık, eksiksiz, iyi yazılmış.
Anne Gunn

4
RemoveAttr () yöntemini kullanarak, devre dışı bırakılmış özniteliğin kendisini tamamen kaldırmış olursunuz; prop () ise yalnızca özelliğin temel boolean değerini false olarak ayarlar. Bunun doğru olduğuna inanmıyorum. HTML'de, yalnızca disabledözelliğin varlığı öğeyi devre dışı bırakır. Örneğin <button disabled="false"></button> , düğmeyi etkinleştirmeyecek şekilde özelliğin kaldırılması gerekir. $('button').prop('disabled', false);JQuery arayarak bu kod alanında gözlemlediğim gibi, sizin için özelliği kaldıracak (özellik kaldırma görmek için inceleyin).
Naftali

42
<input type="text" disabled="disabled" class="inputDisabled" value="">
​<button id="edit">Edit</button>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

$("#edit").click(function(event){
    event.preventDefault();
    $('.inputDisabled').removeAttr("disabled")
});​

http://jsfiddle.net/ZwHfY/


42

devre dışı bırakılmış özellik kullanımını kaldırmak için,

 $("#elementID").removeAttr('disabled');

ve devre dışı bırakılmış özellik kullanımını eklemek için,

$("#elementID").prop("disabled", true);

Zevk almak :)


4
Veya vanilya js'deki element.removeAttribute ('devre dışı')
Dragos Rusu

16

Bunun gibi kullanın,

HTML:

<input type="text" disabled="disabled" class="inputDisabled" value="">

<div id="edit">edit</div>

JS:

 $('#edit').click(function(){ // click to
            $('.inputDisabled').attr('disabled',false); // removing disabled in this class
 });

6
Bu aslında benim için çalışıyor. Prop ('devre dışı', yanlış) şaşırtıcı işe yaramadı.
Stefan

@Stefan burada da aynı şey! Nedenini buldun mu?
Alexander Suraphel

1
Bu eski bir iplik olduğunu biliyorum ama birisi hala bu dikkat çekerek, sorunum elemanı bir olmasıydı <a>hangi, .prop('disabled', false)işi yapmaz. Bunu bir olarak değiştirdim <button>ve şimdi çalışıyor
Oliver Nagy


3

Bunu kolayca kurabileceğini düşündüm

$(function(){
$("input[name^=radio_share]").click
(
    function()
    {
        if($(this).attr("id")=="radio_share_dependent")
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",false);   
        }
        else
        {
            $(".share_dependent_block input, .share_dependent_block select").prop("disabled",true);   
        }
    }
 );
});

3

Benim için çalışan tek kod buydu:

element.removeProp('disabled')

Unutmayın ki removeProp ve değil removeAttr.

jQuery 2.1.3Burada kullanıyorum .


12
JQuery belgelerinden: Önemli: .removeProp () yöntemi bu özellikleri false olarak ayarlamak için kullanılmamalıdır. Bir yerel özellik kaldırıldıktan sonra tekrar eklenemez. Daha fazla bilgi için .removeProp () işlevine bakın.
XanatosLightfiren

2

2018, JQuery olmadan

Sorunun JQuery ile ilgili olduğunu biliyorum: bu cevap sadece FYI.

document.getElementById('edit').addEventListener(event => {
    event.preventDefault();
    [...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
}); 

0

Bu soru özellikle jQuery'den bahsediyor, ancak bunu jQuery olmadan başarmak istiyorsanız, vanilya JavaScript'indeki eşdeğer:

elem.removeAttribute('disabled');

elem.removeAttr('disabled');benim için çalışıyor
Cheng Hui Yuan
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.