Usando jQuery, ¿cuál es la mejor manera de configurar detectores de eventos onClick para botones de opción?

StackOverflow https://stackoverflow.com/questions/46704

  •  09-06-2019
  •  | 
  •  

Pregunta

Para el siguiente HTML:

<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>

Cambiando del 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

EDITAR:La respuesta que seleccioné responde a 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 opción.

¿Fue útil?

Solución

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

Otros consejos

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

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

me gusta usar bind() en lugar de conectar directamente el controlador de eventos porque puede pasar datos adicionales al controlador de eventos (no se muestran aquí, pero los datos son un tercer argumento bind()) y porque puede desvincularlos fácilmente (y puede vincularlos y desvincularlos por grupo). consulte los documentos de jQuery).

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

$(function() {

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

});

function fn()
{
   //do stuff here
}
$(function() {
    $('input[@type="radio"]').click(radioClicks);
});

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);
$(function() {
    $('#myForm :radio').each(function() {
        if ($(this).value == 'S') {
            $(this).attr("checked", true);
            radioClicks();
        }

        $(this).click(radioClicks);
    });
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top