jQuery .attr («отключен», «отключен») не работает в Chrome - PullRequest
42 голосов
/ 18 мая 2011

Не уверен, почему это не работает.

Когда люди нажимают кнопку «Изменить» моего приложения, отключенные текстовые поля становятся редактируемыми:

$("#bewerken").click(function(e)    {
    $("input[disabled='disabled']").removeAttr('disabled');
});

Затем я хочу отключитьтекстовые поля снова, когда пользователь сохраняет;Этот код привязан к моей кнопке сохранения:

$("#save_school_changes").click(function(e) {
    //stuff

    $.ajax({
        type: "POST",
        url: "/school/save_changes",
        data: { //stuff },
        success: function(data)
        {
            $("#feedback_top").html("<p>" + data['message'] + "</p>").slideDown('slow').delay(2000).slideUp();
            $("input[type='text']").attr('disabled', 'disabled');

        }
    });

    e.preventDefault();
});

Насколько я знаю, это должно снова отключить текстовые поля.Тем не менее, это не похоже на работу в Chrome.Это работает в Firefox.У меня еще не было возможности протестировать IE или Safari.Есть ли способ сделать эту работу в Chrome, а?Большое спасибо!

Ответы [ 9 ]

75 голосов
/ 18 мая 2011

Если вы используете jQuery <1.6 сделать это: </p>

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

Если вы используете jQuery 1.6 +:

jQuery("input[type='text']").prop("disabled", true);

См. Этот вопрос: .prop () vs .attr () , чтобы узнать, почему.

Или вы можете попробовать это:

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

см. Здесь информацию о :text

4 голосов
/ 20 марта 2014

Для меня ни один из этих ответов не сработал, но я наконец нашел тот, который сделал.Firefox -

$('input:text').AddClass("notactive");

и это -

<style type="text/css">
    .notactive {
        pointer-events: none;
        cursor: default;
    }
 </style>
2 голосов
/ 02 июня 2013

Это старая публикация, но у меня не работает ни одно из этих решений, поэтому я публикую свое решение, если кто-то посчитает это полезным.

У меня была такая же проблема.

В моем случае, элемент управления, который мне нужно было отключить, был пользовательским элементом управления с дочерними выпадающими списками, которые я мог отключить в IE, но не в Chrome.

Мое решение состояло в том, чтобы отключить каждый дочерний объект, а не только пользовательский контроль, с помощью этого кода:

$('#controlName').find('*').each(function () { $(this).attr("disabled", true); })

Теперь он работает для меня в Chrome.

0 голосов
/ 01 июля 2019

В основном отключенный атрибут не работает с тегами привязки начиная с HTML-5 и далее. Следовательно, мы должны изменить его, скажем, на «кнопку» и соответствующим образом стилизовать его под соответствующий цвет, стиль рамки и т. Д. Это наиболее подходящее решение для любой аналогичной проблемы, с которой сталкиваются пользователи в Chrome. Только несколько элементов поддерживают атрибут disabled: Диапазон, выбор, опция, текстовое поле, ввод, кнопка.

0 голосов
/ 18 ноября 2013

Моя проблема с этим состояла в том, что элемент, использующий отключенный атрибут, должен быть определен как элемент формы, тип ввода .ie, чтобы он работал. Оба работали с attr () и prop (), но выбрали последний для поддержки в будущем.

0 голосов
/ 18 мая 2011

Здесь:
http://jsbin.com/urize4/edit

Live Preview
http://jsbin.com/urize4/

Вы должны использовать «readonly» вместо:

$("input[type='text']").attr("readonly", "true");
0 голосов
/ 18 мая 2011

Вы пробовали с prop () ??

Ну вот реквизит () кажется у меня работает .

0 голосов
/ 18 мая 2011

если вы удаляете все отключенные атрибуты из ввода, то почему бы просто не сделать:

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

Затем после успешного выполнения Ajax:

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

Убедитесь, что вы используете удалить отключенный атрибутперед отправкой, иначе данные не будут отправлены.Если вам нужно отправить его перед изменением, вам нужно использовать readonly.

0 голосов
/ 18 мая 2011

Попробуйте $("input[type='text']").attr('disabled', true);

...