Отключить / включить вход с помощью jQuery?

1957
$input.disabled = true;

или

$input.disabled = "disabled";

Какой стандартный способ? И, наоборот, как вы включаете отключенный ввод?

Теги:
html-input

15 ответов

3368
Лучший ответ

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.

На самом деле, я сомневаюсь, что для этого метода существует много законных применений, логические реквизиты выполняются таким образом, что вы должны установить их в false вместо "удалить" их, как их "атрибутные" аналоги в 1.5

  • 9
    Кроме того, помните, что если вы хотите отключить ВСЕ элементы управления вводом формы - вкл. флажки, радио, текстовые области и т. д. - вы должны выбрать ':input' , а не просто 'input' . Последний выбирает только актуальные элементы <input>.
  • 32
    @CornelMasson input,textarea,select,button немного лучше использовать, чем :input - :input в качестве селектора довольно неэффективен, потому что он должен выбрать * затем выполнить цикл по каждому элементу и отфильтровать по тэгу - если вы передаете 4 тэга селекторы напрямую НАМНОГО быстрее. Кроме того :input не является стандартным селектором CSS, поэтому любые приросты производительности, которые возможны из querySelectorAll будут потеряны
Показать ещё 10 комментариев
53

Только ради новых соглашений && делая его адаптируемым в будущем (если ситуация не изменится с ECMA6 (????):

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

и

$(document).off('event_name', '#your_id', function() {
    $(this).attr('disabled','disabled');   
});
  • 12
    Jikes! Почему $(document).on('event_name', '#your_id', function() {...}) вместо $('#your_id').on('event_name', function() {...}) Как описано в документации по jQuery .on (), первая использует делегирование и прослушивает все события event_name события, которые всплывают в document и проверяет их на соответствие #your_id . Последний слушает только события $('#your_id') и это лучше масштабируется.
  • 23
    Первый работает для элементов, вставленных в DOM в любой момент, второй - только для тех, которые существуют в данный момент.
Показать ещё 1 комментарий
25
    // Disable #x
    $( "#x" ).prop( "disabled", true );
    // Enable #x
    $( "#x" ).prop( "disabled", false );

Иногда вам нужно отключить/включить элемент формы, например input или 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

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

или

$("input")[0].disabled = false;
  • 2
    Конечно, вопрос задан для jQuery, и это меняет состояние в простом JavaScript, но это работает.
  • 1
    Это изменяет состояние в JavaScript, но все еще использует селектор jQuery для получения первого ввода.
Показать ещё 1 комментарий
7

Вы можете поместить это где-то глобальное в свой код:

$.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 комментарий
5

Если вы просто хотите инвертировать текущее состояние (например, поведение кнопки переключения):

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

Есть несколько способов их использования: вы можете включить/отключить любой элемент :

Подход 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

Вы можете использовать метод 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>
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 не нужно использовать для этого, когда больше элементов больше.
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.
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.

0

Я использовал ответ @gnarf и добавил его как функцию

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

Затем используйте так:

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

В jQuery Mobile:

Для отключения

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

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

$('#someselectElement').selectmenu().selectmenu('enable').selectmenu('refresh', true);
$('#someTextElement').textinput('enable');
0
<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
    Из очереди отзывов : Могу ли я попросить вас добавить больше контекста вокруг вашего ответа. Ответы только на код трудно понять. Это поможет вам и будущим читателям, если вы сможете добавить больше информации в свой пост.
-2

Отключить true для типа ввода:

В случае конкретного типа ввода (пример ввода текста)

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

Для всех типов ввода

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню