jQuery pour désactiver/activer le textarea en fonction bouton radio est sélectionné à l'intérieur de la boucle
J'ai la suite de champs de formulaire. Si le bouton radio (travel_yes/no_##)
est modifié à partir de No
à Yes
, puis le suivant textarea (travelDetails_#)
doivent être activées. Si ils changent on Ne, puis le textarea doit être désactivé de nouveau. Je tiens à rester loin de l'aide de .next()
ou .find()
pour la performance car je sais que mes valeurs d'ID unique (également l'emplacement des champs textarea peut changer).
MISE À JOUR: BOUTONS RADIO DEVRAIENT ÊTRE DES GROUPES, PAR JEU, PAS TOUS ENSEMBLE
<div class="controls">
<label class="radio inline">
<input type="radio" name="travel1" data-travelNumber="1" id="travel_yes_1" value="Yes" tabindex="25" >
Yes
</label>
<label class="radio inline">
<input name="travel1" type="radio" data-travelNumber="1" id="travel_no_1" value="No" tabindex="26" checked >
No
</label>
</div>
<div class="controls">
<textarea name="travelDetails" id="travelDetails_1" ></textarea>
</div>
<div class="controls">
<label class="radio inline">
<input type="radio" name="travel2" data-travelNumber="2" id="travel_yes_2" value="Yes" tabindex="25" >
Yes
</label>
<label class="radio inline">
<input name="travel2" type="radio" data-travelNumber="2" id="travel_no_2" value="No" tabindex="26" checked >
No
</label>
</div>
<div class="controls">
<textarea name="travelDetails" id="travelDetails_2"></textarea>
</div>
<div class="controls">
<label class="radio inline">
<input type="radio" name="travel3" data-travelNumber="3" id="travel_yes_3" value="Yes" tabindex="25" >
Yes
</label>
<label class="radio inline">
<input name="travel3" type="radio" data-travelNumber="3" id="travel_no_3" value="No" tabindex="26" checked >
No
</label>
</div>
<div class="controls">
<textarea name="travelDetails" id="travelDetails_3"></textarea>
</div>
Voici mon jQuery code qui ne fonctionne PAS.
$("[data-travelNumber]").each(function() {
var $this = $(this), limit = +$(this).data("travelNumber");
$("input:radio[name=travel]:checked").live('click',function(){
if ( $(this).val() === 'Yes' )
$('#travelDetails_' + limit).removeAttr('disabled');
else
$('#travelDetails_' + limit).attr("disabled", "enabled");
});
});
});
- Il est toujours préférable de ne PAS utiliser des attributs HTML, il limite la validation du code et peut ne pas fonctionner correctement dans tous les navigateurs.
- C'est un produit principal et le navigateur du client prend en charge. Mais c'est une bonne info pour quelqu'un d'autre qui pourrait venir à travers ce, aussi.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire comme ceci en prenant le numéro de l'id de trouver un textarea
http://jsfiddle.net/hnwYM/
ou le changer si jamais vous avez des chiffres plus 9
à
Ou vous pouvez utiliser vos données attr
Vous pouvez utiliser la même méthode pour arrêter de traverser le dom
http://jsfiddle.net/U9Ywe/
J'ai créé quelque chose dans JsFiddle qui fait le tour pour vous. Je fixe les boutons de la radio des noms de groupe, car ils ont tous le même nom.
JS:
Voici l'exemple: JsFiddle exemple
Cela devrait le faire:
Quand un bouton est cliqué, c'est faire le
travelNumber
, et d'activer ou de désactiver le textarea avecid='travelDetails_'+travelNumber
, selon le nombre.Essayez ceci:
Vous pouvez le faire de cette façon
Démonstration En Direct
I'd like to stay away from using .next() or .find() for performance
$(this).closest('.controls').next('.controls').find('textarea').attr('disabled', $(this).val() === 'Yes');