Je crois que c'est le problème : Si vous avez plus d'un bouton radio, et que l'un d'entre eux est cliqué, il n'y a aucun moyen de les désélectionner tous. Ce qu'il faut, c'est un sélecteur "aucun ou un seul", donc les cases à cocher ne seraient pas appropriées. Vous pourriez avoir un bouton "effacer" ou quelque chose comme ça pour tout désélectionner, mais ce serait bien de pouvoir simplement cliquer sur le bouton radio sélectionné pour le désélectionner et revenir à l'état "aucun", afin de ne pas encombrer votre interface utilisateur avec un contrôle supplémentaire.
Le problème avec l'utilisation d'un gestionnaire de clics est que lorsque celui-ci est appelé, le bouton radio est déjà coché. Vous ne savez pas s'il s'agit du clic initial ou d'un deuxième clic sur un bouton radio déjà coché. J'utilise donc deux gestionnaires d'événements, mousedown pour définir l'état précédent, puis le gestionnaire de clic tel qu'utilisé ci-dessus :
$("input[name=myRadioGroup]").mousedown(function ()
{
$(this).attr('previous-value', $(this).prop('checked'));
});
$("input[name=myRadioGroup]").click(function ()
{
var previousValue = $(this).attr('previous-value');
if (previousValue == 'true')
$(this).prop('checked', false);
});
0 votes
Il convient de noter que si vous faites également quelque chose avec cette radio en fonction de son état coché, vous pouvez obtenir des valeurs "coché" trompeuses lors des événements onclick. Une solution consiste à attribuer à la pression de la souris la valeur que vous allez lui attribuer (le contraire de ce qu'elle a) dans une variable sur le nœud comme this.__rval et à vérifier son existence dans votre gestionnaire onclick. S'il existe, vous savez que la valeur qu'il contient est correcte, bien que this.checked puisse être sur le point de changer.