web-dev-qa-db-fra.com

Définition d'un contrôle en lecture seule à l'aide de jquery 1.6 .prop ()

Avec la sortie de jQuery 1.6, la recommandation sur SO a été de commencer à utiliser prop () là où vous utilisiez attr ().

Que se passe-t-il lorsque je veux créer un élément en lecture seule?

$('.control').prop('readonly', 'readonly');
$('.control').prop('readonly', true);

Aucun de ces éléments ne semble rendre le contrôle en lecture seule. Faire un élément en lecture seule est-il l'exception à la règle?

27
ajbeaven

Le problème est que le nom de la propriété est sensible à la casse. Essayer:

$('.control').prop('readOnly', true);

Bien que je ne sache vraiment pas pourquoi cela nécessite jQuery. Cela fonctionne aussi bien:

document.getElementsByClassName("control")[0].readOnly = true;
46
aroth

Essaye ça:

$(".control").prop({ readOnly: true });

Je pense à cela comme ceci: . Attr () obtient la valeur par défaut dans le balisage html tandis que . Prop () obtient/définit la valeur dynamiquement. Regardez ce qui suit:

<input id="someInput" readonly="readOnly" />

$(".control").attr("readOnly") // would yield "readOnly"
$(".control").prop("readOnly") // would yield true
$(".control").is(":readOnly")  // would yield true

La documentation de l'API dit ceci:

La différence entre les attributs et les propriétés peut être importante dans des situations spécifiques. Avant jQuery 1.6, la méthode .attr () tenait parfois compte des valeurs de propriété lors de la récupération de certains attributs, ce qui pouvait entraîner un comportement incohérent. Depuis jQuery 1.6, la méthode .prop () fournit un moyen de récupérer explicitement les valeurs des propriétés, tandis que .attr () ne récupère que les attributs.

10
Code Maverick