Вимкнути / увімкнути вхід за допомогою jQuery?


2291
$input.disabled = true;

або

$input.disabled = "disabled";

Який стандартний спосіб? І, навпаки, як увімкнути відключений вхід?



1
Я знайшов плагін DependsOn, який вам може бути корисним
Onshop

Відповіді:


3810

jQuery 1.6+

Для зміни disabledвластивості слід скористатися .prop()функцією.

$("input").prop('disabled', true);
$("input").prop('disabled', false);

jQuery 1.5 і нижче

.prop()Функція не існує, але .attr()робить подібні:

Встановити відключений атрибут.

$("input").attr('disabled','disabled');

Щоб знову включити, належним чином використовуватиметься метод .removeAttr()

$("input").removeAttr('disabled');

У будь-якій версії jQuery

Ви завжди можете покластися на фактичний об’єкт DOM і, ймовірно, трохи швидший, ніж інші два варіанти, якщо ви маєте справу лише з одним елементом:

// assuming an event handler thus 'this'
this.disabled = true;

Перевага використання методів .prop()або .attr()методів полягає в тому, що ви можете встановити властивість для групи вибраних елементів.


Примітка. У 1.6 є .removeProp()метод, який звучить дуже схоже removeAttr(), але НЕ ВИКОРИСТОВУЄТЬСЯ на рідних властивостях, таких як 'disabled' Уривок з документації:

Примітка. Не використовуйте цей метод для видалення нативних властивостей, таких як перевірені, відключені або вибрані. Це повністю вилучить властивість і, як тільки буде видалено, не може бути додано знову до елемента. Використовуйте .prop (), щоб встановити ці властивості замість false.

Насправді, я сумніваюся, що для цього методу існує багато законних застосувань, булеві реквізити робляться таким чином, що ви повинні встановити їх на помилкові, а не "видаляти" їх, як їх аналоги "атрибуту" в 1,5


9
Вбік пам’ятайте, що, якщо ви хочете відключити ВСІ елементи керування форми введення, - у т.ч. прапорці, радіо, текстові області тощо - вам потрібно вибрати ':input', а не просто 'input'. Останній вибирає лише фактичні елементи <input>.
Корнел Массон

35
@CornelMasson input,textarea,select,buttonтрохи краще використовувати, ніж :input- :inputяк селектор є досить неефективним, тому що він повинен вибрати, *а потім перетворити цикл на кожен елемент і відфільтрувати за ім'ям тегів - якщо ви перейдете безпосередньо 4 селектора імен тегів, це набагато швидше. Крім того, :inputце не стандартний CSS-селектор, тому будь-які підвищення продуктивності, які можливі від цього querySelectorAll, втрачаються
gnarf

3
Це просто заважає користувачеві отримати доступ до нього, чи він фактично видаляє його з веб-запиту?
OneChillDude

4
Використання параметра .removeProp("disabled")викликало проблему "видалення власності та не додавання знову", як вказував @ThomasDavidBaker, для деяких браузерів, таких як Chrome, тоді як він працював чудово на таких, як Firefox. Справді нам слід бути обережними. Завжди використовуйте .prop("disabled",false)замість цього
Sandeepan Nath,

6
Ні .prop, ні .attr не є достатніми для відключення елементів якоря; .prop навіть не затьмарить 'контроль' (.attr робить, але href все ще активний). Вам також потрібно додати обробник подій клацання, який викликає prevenDefault ().
Джефф Лоурі

61

Тільки заради нових конвенцій та&працьовування адаптації, яка рухається вперед (якщо тільки з ECMA6 все не зміниться кардинально: ???:)

$(document).on('event_name', '#your_id', function() {
    $(this).removeAttr('disabled');
});

і

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});

12
Жарти! Чому $(document).on('event_name', '#your_id', function() {...})замість цього $('#your_id').on('event_name', function() {...}). Як описано в документації jQuery .on (), колишній використовує делегування і прослуховує всі event_name події, що надходять до бульбашки, documentі перевіряє їх на відповідність #your_id. Останній вислуховує $('#your_id')лише події, і це краще масштабує.
Пітер В. Морч

23
Перший працює для елементів, вставлених у DOM в будь-якій точці, останні лише для тих, що існують на той момент.
crazymykl

1
@crazymykl Правильно, але ви не повинні додавати елементи з ідентифікатором, який вже є на вашій сторінці.
SepehrM

33
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

Іноді потрібно вимкнути / ввімкнути такий елемент форми, як введення або textarea. Jquery допомагає вам легко зробити це за допомогою встановлення атрибута вимкнено на "вимкнено". Наприклад:

  //To disable 
  $('.someElement').attr('disabled', 'disabled');

Щоб увімкнути відключений елемент, вам потрібно видалити атрибут "disabled" з цього елемента або видалити його рядок. Наприклад:

//To enable 
$('.someElement').removeAttr('disabled');

// OR you can set attr to "" 
$('.someElement').attr('disabled', '');

посилайтеся: http://garmoncheg.blogspot.fr/2011/07/how-to-disableenable-element-with.html


13
$("input")[0].disabled = true;

або

$("input")[0].disabled = false;

2
Звичайно, питання, яке задають jQuery, і це змінює стан у звичайному JavaScript, але воно працює.
basic6

1
Це змінює стан JavaScript, але він все ще використовує селектор jQuery для отримання першого вводу.
cjsimon

3
Але я не думаю, що ми тут робимо енциклопедію jquery, якщо відповідь спрацює, це добре
Саджад Ширази

8

Ви можете поставити це десь глобальним у своєму коді:

$.prototype.enable = function () {
    $.each(this, function (index, el) {
        $(el).removeAttr('disabled');
    });
}

$.prototype.disable = function () {
    $.each(this, function (index, el) {
        $(el).attr('disabled', 'disabled');
    });
}

І тоді ви можете писати такі речі, як:

$(".myInputs").enable();
$("#otherInput").disable();

3
Хоча упаковка функціональності зручно, ви повинні були використовувати propі НЕ attr з disabledвласністю для того , щоб правильно працювати (за умови , JQuery 1.6 або вище).
Пройшов кодування

1
@TrueBlueAussie У чому полягає мінус використання attr? Я використовую вищевказаний код у деяких проектах, і наскільки я пам'ятаю, він працює нормально
Ніку Сурду,

1
Очевидними винятками є елементи керування із властивостями поза кадром. Найвідоміший - checkedвласність прапорців. Використання attrне дасть однакового результату.
Пройшов кодування

7

Якщо ви просто хочете перевернути поточний стан (наприклад, поведінка кнопки):

$("input").prop('disabled', ! $("input").prop('disabled') );

1
дякую, що я маю те саме, що за перемикання це; $ ("input"). prop ('вимкнено', функція (i, v) {return! v;});
Потік

5

Є багато способів їх використання, ви можете вмикати / вимикати будь-який елемент :

Підхід 1

$("#txtName").attr("disabled", true);

Підхід 2

$("#txtName").attr("disabled", "disabled");

Якщо ви використовуєте jQuery 1.7 або новішу версію, тоді використовуйте prop (), а не attr ().

$("#txtName").prop("disabled", "disabled");

Якщо ви хочете ввімкнути будь-який елемент, то вам просто потрібно зробити навпаки того, що ви зробили, щоб його відключити. Однак jQuery пропонує інший спосіб видалити будь-який атрибут.

Підхід 1

$("#txtName").attr("disabled", false);

Підхід 2

$("#txtName").attr("disabled", "");

Підхід 3

$("#txtName").removeAttr("disabled");

Знову ж таки, якщо ви використовуєте jQuery 1.7 або новішу версію, тоді використовуйте prop (), а не attr (). Це так. Так ви вмикаєте або відключаєте будь-який елемент за допомогою jQuery.


2

Оновлення на 2018 рік:

Тепер немає необхідності в JQuery , і це було деякий час , так document.querySelector чи document.querySelectorAll(для декількох елементів) роблять майже точно таку ж роботу , як $, плюс більш явними ті getElementById, getElementsByClassName,getElementsByTagName

Відключення одного поля класу "вхідний прапорець"

document.querySelector('.input-checkbox').disabled = true;

або кілька елементів

document.querySelectorAll('.input-checkbox').forEach(el => el.disabled = true);

1
питання спеціально задає питання про jQuery ... але однаково ваше твердження є правильним, і варто знати, що jQuery не потрібно використовувати для цього, коли вже є кілька елементів.
ADyson

2

Ви можете використовувати метод jQuery prop () для відключення або включення елемента форми або динамічного керування за допомогою jQuery. Метод prop () вимагає jQuery 1.6 і вище.

Приклад:

<script type="text/javascript">
        $(document).ready(function(){
            $('form input[type="submit"]').prop("disabled", true);
            $(".agree").click(function(){
                if($(this).prop("checked") == true){
                    $('form input[type="submit"]').prop("disabled", false);
                }
                else if($(this).prop("checked") == false){
                    $('form input[type="submit"]').prop("disabled", true);
                }
            });
        });
    </script>

1

Вимкнути:

$('input').attr('readonly', true); // Disable it.
$('input').addClass('text-muted'); // Gray it out with bootstrap.

Увімкнути:

$('input').attr('readonly', false); // Enable it.
$('input').removeClass('text-muted'); // Back to normal color with bootstrap.

1

Вимкнути вірно для типу введення:

У випадку конкретного типу введення ( наприклад, тип введення тексту )

$("input[type=text]").attr('disabled', true);

Для всіх типів типу введення

$("input").attr('disabled', true);

1
Завдяки цьому я допомогла мені виділити ім'я вводу. $("input[name=method]").prop('disabled', true);
Гаррі Бош

1

це працює для мене

$("#values:input").attr("disabled",true);
$("#values:input").attr("disabled",false);

0

Я використав відповідь @gnarf і додав її як функцію

   $.fn.disabled = function (isDisabled) {
     if (isDisabled) {
       this.attr('disabled', 'disabled');
     } else {
       this.removeAttr('disabled');
     }
   };

Тоді використовуйте так

$('#myElement').disable(true);

0

2018, без JQuery (ES6)

Вимкнути всіх input:

[...document.querySelectorAll('input')].map(e => e.disabled = true);

Відключити inputсid="my-input"

document.getElementById('my-input').disabled = true;

Питання полягає в тому з JQuery, це просто FYI.




-1
<html>
<body>

Name: <input type="text" id="myText">



<button onclick="disable()">Disable Text field</button>
<button onclick="enable()">Enable Text field</button>

<script>
function disable() {
    document.getElementById("myText").disabled = true;
}
function enable() {
    document.getElementById("myText").disabled = false;
}
</script>

</body>
</html>

1
З черги на огляд : чи можу я попросити вас додати ще трохи контексту навколо вашої відповіді. Відповіді, що стосуються лише коду, важко зрозуміти. Це допоможе запитувачу та майбутнім читачам, якщо ви зможете додати більше інформації у своєму дописі.
RBT

-1

У jQuery Mobile:

Для відключення

$('#someselectElement').selectmenu().selectmenu('disable').selectmenu('refresh', true);
$('#someTextElement').textinput().textinput('disable');

Для включення

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.