web-dev-qa-db-fra.com

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

Je ne sais pas pourquoi cela ne fonctionne pas.

Lorsque des personnes 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 ensuite désactiver les champs de texte à nouveau lorsque l'utilisateur enregistre; J'ai ce code lié à mon bouton de sauvegarde:

$("#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 à nouveau désactiver les champs de texte. Toutefois, cela ne semble pas fonctionner sous Chrome. Cela fonctionne dans Firefox. Je n'ai pas encore eu la chance de tester dans IE ou Safari. Y at-il un moyen de faire ce travail dans Chrome aswell? Merci beaucoup!

36
cabaret

Si vous utilisez jQuery <1.6do, ceci:

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

Si vous utilisez jQuery 1.6+:

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

Voir cette question: .prop () vs .attr () pour les références pourquoi.

Ou vous pouvez essayer ceci:

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

voir ici pour info sur :text

70
Neal

Pour moi, aucune de ces réponses n'a fonctionné, mais j'ai finalement trouvé celle qui a fonctionné.

J'avais besoin de ça pour IE-

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

Je devais aussi ajouter ceci pour Chrome et Firefox -

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

et ça -

<style type="text/css">
    .notactive {
        pointer-events: none;
        cursor: default;
    }
 </style>
3
IQtheMC

C'est un ancien message, mais aucune de ces solutions ne fonctionnait pour moi, alors je publie ma solution si quelqu'un trouve cela utile.

Je viens d'avoir le même problème.

Dans mon cas, le contrôle que je devais désactiver était un contrôle utilisateur avec des menus déroulants enfants que je pouvais désactiver dans IE mais pas dans Chrome.

ma solution a été de désactiver chaque objet enfant, pas seulement le contrôle utilisateur, avec ce code:

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

Cela fonctionne pour moi en chrome maintenant.

2
RoyBS

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

0
RussellUresti

si vous supprimez tous les attributs désactivés de l'entrée, pourquoi ne pas simplement faire:

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

Puis après le succès ajax:

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

Assurez-vous de supprimer l'attribut disabled avant de soumettre, sinon les données ne seront pas envoyées. Si vous devez le soumettre avant de le modifier, vous devez utiliser le mode lecture seule. 

0
fanfavorite

Avez-vous essayé avec prop () ??

Eh bien, prop () semble fonctionne pour moi .

0
Galled

Ici:
http://jsbin.com/urize4/edit

Aperçu en direct
http://jsbin.com/urize4/

Vous devriez utiliser "readonly" à la place de:

$("input[type='text']").attr("readonly", "true");
0
Oscar Godson

Mon problème avec cela était que l'élément utilisant l'attribut désactivé devait être défini en tant qu'élément de formulaire, type d'entrée .ie pour que cela fonctionne. Les deux ont travaillé avec attr () et prop () mais ont choisi ce dernier pour la maintenabilité future.

0
lxm7