En primer lugar, es importante tener en cuenta que un evento "Hacer clic" en cualquiera de los fuegos de la radio DESPUÉS de que el valor "verificado" ya esté actualizado. Esto es importante, porque significa que no puede detectar el elemento anterior una vez que el evento ya se ha activado. Si cancela el evento, en realidad está cambiando el valor ATRÁS - sin detenerlo inicialmente. Esto es importante para la forma en que aborda el problema.
Ejemplo:
<input type="radio" name="radioButtonGroup" value="button1" checked="true"/>
<input type="radio" name="radioButtonGroup" value="button2"/>
// At this point, the ':checked' item is button1.
$('input[type=radio]').bind('click', function (ev) {
// If you click on button2 - by this point, the ':checked' item is already button2.
ev.preventDefault(); // These two lines will stop the radio from actually
ev.stopPropagation(); // changing selection.
// At this point, the ':checked' item is set BACK to button1.
});
Debido a esto, la solución más sencilla consiste en replicar el "último" elemento seleccionado en un cierre junto a sus controladores de eventos, de la siguiente manera:
<input type="radio" name="radioButtonGroup" value="button1" checked="true"/>
<input type="radio" name="radioButtonGroup" value="button2"/>
<script type="text/javascript">
var $last = $('[name=radioButtonGroup]:checked');
// Select the radio buttons as a group.
var $radios = $('[name=radioButtonGroup]').bind('change', function (ev) {
// Click event handler
var $clicked = $(ev.target); // This is the radio that just got clicked.
$last.trigger('unclick'); // Fire the "unclick" event on the Last radio.
$last = $('[name=radioButtonGroup]:checked'); // Update the $last item.
// Should see the clicked item's "Value" property.
console.log("Clicked " + $clicked.attr('value'), $clicked, ev);
}).bind('unclick', function (ev) {
// Handler for our new "unclick" event.
// - fires whenever a radio loses focus.
var $unclicked = $(ev.target); // The radio losing it's checked status.
// Should see the unclicked item's "Value" property.
console.log("Unclicked " + $unclicked.attr('value'), $unclicked, ev);
});
</script>
Para un trabajo ejemplo, véase:
http://jsfiddle.net/TroyAlford/wvrtC/
Por favor, seleccione una respuesta como la correcta, o especifique qué información adicional necesita para resolver su problema. –