Je dois d'abord désactiver les entrées, puis cliquer sur un lien pour les activer.
C’est ce que j’ai essayé jusqu’à présent, mais cela ne fonctionne pas.
HTML:
<input type="text" disabled="disabled" class="inputDisabled" value="">
jQuery:
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').removeAttr("disabled")
});
Ceci me montre true
puis false
mais rien ne change pour les entrées:
$("#edit").click(function(event){
alert('');
event.preventDefault();
alert($('.inputDisabled').attr('disabled'));
$('.inputDisabled').removeAttr("disabled");
alert($('.inputDisabled').attr('disabled'));
});
Toujours utilisez la méthode prop()
pour activer ou désactiver des éléments lors de l'utilisation de jQuery (voir pourquoi ci-dessous).
Dans votre cas, ce serait:
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').prop("disabled", false); // Element(s) are now enabled.
});
Pourquoi utiliser
prop()
alors que vous pourriez utiliserattr()
/removeAttr()
pour le faire?
prop()
devrait être utilisé pour obtenir ou définir des propriétés (telles que autoplay
, checked
, disabled
et required
parmi autres).
En utilisant removeAttr()
, vous supprimez complètement l'attribut disabled
lui-même - alors que prop()
ne fait que définir la valeur booléenne sous-jacente de la propriété sur false.
Même si ce que vous voulez faire peut être utilisé avec attr()
/removeAttr()
, cela ne signifie pas que doit être effectué (et peut comportement étrange/problématique, comme dans ce cas).
Les extraits suivants (tirés de la documentation de jQuery pour prop () ) expliquent ces points plus en détail:
"La différence entre attributs et 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. À partir de jQuery 1.6, la méthode.prop()
fournit un moyen de récupérer explicitement les valeurs de propriété, alors que.attr()
récupère les attributs. ""Les propriétés affectent généralement l’état dynamique d’un élément DOM sans modifier l’attribut HTML sérialisé. La propriété
value
des éléments d’entrée, la propriétédisabled
des entrées et des boutons ou lachecked
La méthode.prop()
doit être utilisée pour définirdisabled
etchecked
à la place de la méthode.attr()
. La méthode.val()
doit être utilisée pour obtenir et définirvalue
. "
<input type="text" disabled="disabled" class="inputDisabled" value="">
<button id="edit">Edit</button>
$("#edit").click(function(event){
event.preventDefault();
$('.inputDisabled').removeAttr("disabled")
});
supprimer l'utilisation de l'attribut désactivé,
$("#elementID").removeAttr('disabled');
et d'ajouter l'utilisation d'attribut désactivé,
$("#elementID").prop("disabled", true);
Prendre plaisir :)
Utilisez comme ça,
HTML:
<input type="text" disabled="disabled" class="inputDisabled" value="">
<div id="edit">edit</div>
JS:
$('#edit').click(function(){ // click to
$('.inputDisabled').attr('disabled',false); // removing disabled in this class
});
Je pense que vous essayez de basculer l'état désactivé, dans ce cas, vous devriez utiliser ceci (à partir de cette question ):
$(".inputDisabled").prop('disabled', function (_, val) { return ! val; });
Pensé cela, vous pouvez facilement configurer
$(function(){
$("input[name^=radio_share]").click
(
function()
{
if($(this).attr("id")=="radio_share_dependent")
{
$(".share_dependent_block input, .share_dependent_block select").prop("disabled",false);
}
else
{
$(".share_dependent_block input, .share_dependent_block select").prop("disabled",true);
}
}
);
});
C'est le seul code qui a fonctionné pour moi:
element.removeProp('disabled')
Notez que c'est removeProp
et non removeAttr
.
J'utilise jQuery 2.1.3
ici.
Je sais que la question concerne JQuery: cette réponse est juste pour votre information.
document.getElementById('edit').addEventListener(event => {
event.preventDefault();
[...document.querySelectorAll('.inputDisabled')].map(e => e.disabled = false);
});