<script>
$("input[name='my_radio_button']").change(function(){
if ($("input[@name='my_radio_button']:checked").val() == 'ONE'){
do_this_stuff();
} else { do_other_stuff(); }
});
</script>
<input type="radio" name="my_radio_button1" id="radio1" value="ONE" checked />
<input type="radio" name="my_radio_button2" id="radio2" value="TWO" />
(assume complete HTML and the script firing when all is ready)
The change event seems to fire when clicking to select a radio option, but not when the selection is changed with keyboard. Can anything be done about this?
edit - makes no difference if I use bind
or live
-- is this just a bug?
To clarify, the event does not fire even after focus is lost.
edit 2 - nobody knows the reason for this?
edit 3 - as DonaldIsFreak pointed out this seems to be a chrome problem
As you can see here: http://www.w3schools.com/jsref/event_onchange.asp The onchange attribute is not supported for radio buttons. The first SO question linked by you gives you the answer: Use the onclick event instead and check the radio button state inside of the function it triggers.
To Select a Check Box or Radio Button (Keyboard)Press Tab and the arrow keys until the check box or radio button has the keyboard focus, as shown by the highlight. Press the Spacebar.
First, register an event handler to the change event of the body . When a radio button is clicked, its change event is bubbled to the body. This technique is called event delegation.
To select a radio button by clicking on its text in React:Add a label element for each radio button. The htmlFor prop of each label should be set to the id of each radio button. Click on the label element to select the radio button.
Here is a reliable fix http://evilstreak.co.uk/blog/fixing-change-events-on-radios
And using it this is how you would implement it with your example: And here is a demo of the code below http://www.jsfiddle.net/uDkdJ/1/ I tested this demo in FF3.6, IE8, Safari5, Chrome7, and Opera10.65
$.fn.fix_radios = function() {
function focus() {
if ( !this.checked ) return;
if ( !this.was_checked ) {
$( this ).change();
}
}
function change( e ) {
if ( this.was_checked ) {
e.stopImmediatePropagation();
return;
}
$( "input[name=" + this.name + "]" ).each( function() {
this.was_checked = this.checked;
} );
}
return this.focus( focus ).change( change );
}
$(function() {
$( "input[type=radio]" ).fix_radios();
$("input[name='my_radio_button']").change(function(){
if ($("input[@name='my_radio_button']:checked").val() == 'ONE'){
do_this_stuff();
} else { do_other_stuff(); }
});
});
In jquery 1.4.2 @ selector does not work. Look at this example to see if it is useful to you, change the "change" event per "click".
html
<input type="radio" name="rdio" value="a" checked="checked" />
<input type="radio" name="rdio" value="b" />
<input type="radio" name="rdio" value="c" />
<br />
<div id="test"></div>
javascript:
$("input[name='rdio']").click(function(){
if ($("input[name='rdio']:checked").val() == 'a')
$("#test").append("<div>a</div>");
else if ($("input[name='rdio']:checked").val() == 'b')
$("#test").append("<div>b</div>");
else
$("#test").append("<div>c</div>");
});
example
ref 1
ref 2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With