Як видалити атрибут "вимкнено" за допомогою jQuery?


394

Мені потрібно спочатку вимкнути введення, а потім натиснути посилання, щоб увімкнути їх.

Це те, що я намагався поки що, але це не працює.

HTML:

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

jQuery:

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


Це показує мені, trueа потім, falseале нічого не змінюється для входів:

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

2
Я не бачу вашої проблеми. Про що ви питаєте?
nicosantangelo

То яке питання? я маю на увазі, з якою проблемою ви стикаєтеся
Satya Teja

7
Використовуйте prop () - .prop ('вимкнено', помилково)
Jay Blanchard

Якщо ваша проблема вирішена, будь ласка, позначте прийняту (Реальну) відповідь, щоб інші знали ...
Dhamu

проблема полягає в тому, що він не вимкнений після
кліку

Відповіді:


817

Завжди використовуйте prop()метод, щоб увімкнути або вимкнути елементи під час використання jQuery (див. Нижче, чому).

У вашому випадку це було б:

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

Приклад jsFiddle тут.


Навіщо використовувати, prop()коли ви могли використовувати attr()/ removeAttr()робити це?

В принципі, prop()повинні бути використані при отриманні або настройки властивостей (таких , як autoplay, checked, disabledі requiredсеред інших).

Використовуючи removeAttr(), ви повністю видаляєте сам disabledатрибут - в той час prop()як лише встановлюєте булінове значення властивості значення false.

Хоча те, що ви хочете зробити, можна зробити за допомогою attr()/ removeAttr(), це не означає, що це слід робити (і може спричинити дивну / проблемну поведінку, як у цьому випадку).

Наступні витяги (взяті з документації jQuery для prop () ) детальніше пояснюють ці моменти:

"Різниця між атрибутами та властивостями може бути важливою у конкретних ситуаціях. Перед jQuery 1.6 .attr()метод іноді враховував значення властивостей під час отримання деяких атрибутів, що може спричинити непослідовність поведінки. Що стосується jQuery 1.6, .prop() метод забезпечує спосіб явного пошуку. значення властивостей, .attr()отримуючи атрибути. "

"Властивості, як правило, впливають на динамічний стан елемента DOM, не змінюючи серіалізований атрибут HTML. Приклади включають value властивість елементів введення, disabledвластивість входів та кнопок або checkedвластивість прапорця. .prop()Метод слід використовувати для встановлення, disabledа checkedне для нього .attr() метод. .val()метод повинен бути використаний для отримання та установки value«.


3
Люди також повинні знати про брудний прапор перевірки, який повністю порушується attrпроти propпрапорців: w3.org/TR/html5/forms.html#concept-input- kontrole-dirty, за винятком внутрішньої магії вирішення jQuery.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

19
Хм.
UpTheCreek

3
@UpTheCreek теж не працював для мене. Але я виявив проблему сфери застосування цього пункту (як завжди). У конкретному випадку .prop()був виконаний на елементі, на який вказував this( this.prop("disabled", false)але, перебуваючи в зворотному звороті, він прив'язувався до неправильного елемента, тому мені довелося виконати загальне var that = thisвирішення. Спроба грати з .apply()/ .call()не працювала добре; я не знаю чому. Двічі перевірте, console.log(this)чи встановлено ваш бажаний об'єкт, безпосередньо перед тим, як зателефонуватиthis.prop(...)
Kamafeather

3
Я висуваю цю відповідь як кандидата на перехід у розділ документа. Чіткий, повний, добре написаний.
Енн Ганн

4
Використовуючи removeAttr (), ви повністю видаляєте сам відключений атрибут - в той час як prop () просто встановлює базове булеве значення властивості на false. Я не вірю, що це правда. У HTML лише наявність disabledвластивості відключить елемент. Наприклад, якщо <button disabled="false"></button> кнопка не активує кнопку, властивість потрібно видалити. Зателефонувавши до $('button').prop('disabled', false);jQuery, ви видалите для вас властивість, як я зауважив у цьому кодексі (перевірте, щоб побачити видалення властивості).
Нафталі

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

щоб видалити відключене використання атрибутів,

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

і додати використання відключеного атрибута,

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

Насолоджуйтесь :)


4
Або просто element.removeAttribute ('disabled') in vanilla js
Dragos Rusu

16

Використовуйте так,

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
Цей насправді працює на мене. Підкріплення ("відключено", помилково) на диво не спрацювало.
Стефан

@Stefan те саме, що тут! Ви дізналися, чому?
Олександр Сурафель

1
Я знаю, що це давня нитка, але якщо хтось все ще бореться з цим, моє питання полягало в тому, що елемент був елементом <a>, на якому .prop('disabled', false)не працює. Я змінив його на a, <button>і він працює зараз
Олівер Надь


3

Думаючи, що це можна легко налаштувати

$(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

Це єдиний код, який працював для мене:

element.removeProp('disabled')

Зауважте, що це removePropі ні removeAttr.

Я jQuery 2.1.3тут використовую .


12
З документації jQuery: Важливо: метод .removeProp () не слід використовувати для встановлення цих властивостей на значення false. Після видалення нативного ресурсу його більше не можна додати. Див. .RemoveProp () для отримання додаткової інформації.
XanatosLightfiren

2

2018, без JQuery

Я знаю, що питання стосується JQuery: ця відповідь - просто FYI.

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

0

Це питання спеціально згадує jQuery, але якщо ви хочете виконати це без jQuery, еквівалент JavaScript у ванілі:

elem.removeAttribute('disabled');

elem.removeAttr('disabled');працює для мене
Чен Хуей Юань
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.