2008-09-05 9 views
10

Para el siguiente código HTML:Usando JQuery, ¿cuál es la mejor manera de configurar los detectores onclick para los botones de opción?

<form name="myForm"> 
    <label>One<input name="area" type="radio" value="S" /></label> 
    <label>Two<input name="area" type="radio" value="R" /></label> 
    <label>Three<input name="area" type="radio" value="O" /></label> 
    <label>Four<input name="area" type="radio" value="U" /></label> 
</form> 

Cambio desde el siguiente código JavaScript:

$(function() { 
    var myForm = document.myForm; 
    var radios = myForm.area; 

    // Loop through radio buttons 
    for (var i=0; i<radios.length; i++) { 
     if (radios[i].value == "S") { 
      radios[i].checked = true; // Selected when form displays 
      radioClicks(); // Execute the function, initial setup 
     } 
     radios[i].onclick = radioClicks; // Assign to run when clicked 
    } 
}); 

Gracias

EDIT: La respuesta que he seleccionado respuestas la pregunta que hice, sin embargo, me gusta la respuesta que usa bind() porque también muestra cómo distinguir el grupo de botones de radio

Respuesta

18
$(function() { 
    $("input:radio") 
     .click(radioClicks) 
     .filter("[value='S']") 
     .attr("checked", "checked"); 
}); 
1
$(function() { 
    $('input[@type="radio"]').click(radioClicks); 
}); 
2
$(function() { 

    $("form#myForm input[type='radio']").click(fn); 

}); 

function fn() 
{ 
    //do stuff here 
} 
0

creo que algo como esto debería funcionar (pero no está probado):

$("input[@type='radio']").each(function(i) { 
    if (this.val() == 'E') { 
     radioClicks(); 
     this.get().checked = true; 
    } 
} 
$("input[@type='radio']").click(radioClicks); 
0
$(function() { 
    $('#myForm :radio').each(function() { 
     if ($(this).value == 'S') { 
      $(this).attr("checked", true); 
      radioClicks(); 
     } 

     $(this).click(radioClicks); 
    }); 
}); 
19
$(document).ready(function(){ 
    $("input[name='area']").bind("click", radioClicks); 
}); 

functionradioClicks() { 
    alert($(this).val()); 
} 

me gusta usar bind() en lugar de cablear directamente al controlador de eventos porque se puede pasar datos adicionales al controlador de eventos (no se muestra aquí pero los datos son un tercer argumento de bind()) y porque puede desvincularlo fácilmente (y puede vincular y desvincular por grupo - consulte el JQuery d ocs).

http://docs.jquery.com/Events/bind#typedatafn

Cuestiones relacionadas