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!
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');
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>
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.
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");
avez-vous essayé avec prop() ??
Bien prop() semble fonctionne pour moi .
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.
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.