jQuery.attr("désactivé", "désactivé") ne fonctionne pas sous Chrome

Je ne sais pas pourquoi ça ne marche pas.

lorsque les gens cliquent sur le bouton "Modifier" de mon application, les champs de texte désactivés deviennent modifiables:

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

je veux alors désactiver à nouveau les champs de texte lorsque l'utilisateur enregistre; j'ai ce code lié à mon bouton Enregistrer:

$("#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();
});

autant que je sache, cela devrait désactiver les champs de texte à nouveau. Cependant, cela ne semble pas fonctionner en Chrome. C'est Firefox. Je n'ai pas encore eu la chance de tester IE ou Safari. Y a-t-il un moyen de faire fonctionner ça en Chrome aussi? Merci beaucoup!

36
demandé sur cabaret 2011-05-18 20:34:19

8 réponses

si vous utilisez jQuery < 1,6 faites ceci:

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

si vous utilisez jQuery 1.6+:

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

voir la question: .prop () vs .attr() pour les références pourquoi.

ou vous pouvez essayer ceci:

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

voir ici pour information sur :text

69
répondu Neal 2017-05-23 12:10:47

pour moi, aucune de ces réponses n'a fonctionné, mais j'en ai finalement trouvé une qui a fonctionné.

j'en avais besoin pour IE -

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

j'ai aussi dû ajouter ceci pour Chrome et Firefox -

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

et ceci -

<style type="text/css">
    .notactive {
        pointer-events: none;
        cursor: default;
    }
 </style>
3
répondu IQtheMC 2017-05-24 15:16:27

c'est un vieux poste mais je n'ai aucune de cette solution a fonctionné pour moi donc je poste ma solution si quelqu'un trouve cela utile.

j'ai eu le même problème.

dans mon cas, le contrôle dont j'avais besoin pour désactiver était un contrôle de l'utilisateur avec des chutes d'enfant que je pouvais désactiver dans IE mais pas dans chrome.

ma solution était de désactiver chaque objet enfant, pas seulement le contrôle des utilisateurs, avec ce code:

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

Ça marche pour moi dans chrome maintenant.

2
répondu RoyBS 2013-06-02 14:29:47

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

0
répondu RussellUresti 2011-05-18 16:37:39

ici:

http://jsbin.com/urize4/edit

Live Preview

http://jsbin.com/urize4 /

vous devez utiliser " readonly "à la place comme:

$("input[type='text']").attr("readonly", "true");
0
répondu Oscar Godson 2011-05-18 16:45:01

avez-vous essayé avec prop() ??

Bien prop() semble fonctionne pour moi .

0
répondu Galled 2011-05-18 16:50:34

si vous supprimez tous les attributs invalides de input, alors pourquoi ne pas simplement faire:

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

puis après ajax succès:

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

assurez-vous d'utiliser remove the disabled attribut avant de soumettre, ou il ne soumettra pas ces données. Si vous avez besoin de le présenter avant de changer, vous devez utiliser readonly à la place.

0
répondu fanfavorite 2011-05-18 16:59:25

mon problème avec ceci était que l'élément utilisant l'attr désactivé devait être défini comme un élément de forme, .ie type d'entrée pour que cela fonctionne. Les deux ont travaillé avec attr() et prop (), mais ont choisi cette dernière pour la maintenance future.

0
répondu lxm7 2013-11-18 13:56:25