2012-06-08 6 views
6

Tengo un grupo de botones de opción con el mismo nombre, pero con valores diferentes. Me gustaría hacer algo como:Cómo obtener una devolución de llamada de intercambio en los botones de opción, pero solo la que estaba SET

$("#langs").on("change", "[name=locale]", myfunction); 

Esto funciona, pero cuando hago clic en un botón de opción nueva mifuncion se llama dos veces: una vez para el botón de "viejo" que está recibiendo de forma automática sin control, y una vez para el nuevo en el que estoy haciendo clic.

cambiar onchange no es una solución, porque lo uso con jquery-mobile y envuelve las entradas con etiqueta, por lo que se hace clic en la etiqueta, no en la entrada.

Respuesta

6

Puede pasar $(this) como argumento para myfunction y luego dentro de myfunction de verificación si el botón de opción está marcada

$("#langs").on("change", "[name=locale]", function() { myfunction($(this)); });

function myfunction(elem) { 
    if(elem.is(':checked')) { 
     // code here 
    } 
} 
+0

Probablemente estoy haciendo algo mal, pero yo tuvo que hacer $ (elem) .is (': checked') para hacer que esto funcione – w4ik

0

Por lo que yo sé, no tiene ninguna restricción para utilizar onclick evente con jquery en una etiqueta. Si tiene una identificación, puede usarla. Digamos que usted tiene el código HTML siguiente:

<label for="foo" id="whatever1">foo</label><input type="radio" name="radiogroup_0" value="foo" > 
<label for="bar" id="whatever2">bar</label><input type="radio" name="radiogroup_1" value="bar" > 

En que jQuery se puede agregar:

$('#whatever1').click(
    function(){ 
    //paste your code inside 
    } 
); 

Lo mismo para la etiqueta del otro botón de radio

$('#whatever1').click(
    function(){ 
    //paste your code inside 
    } 
); 

Espero que esto ayude. Luis M.

0

¿Qué tal intentar algo como:

<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup" data-type="horizontal"> 
    <input type="radio" name="langs" id="first" value="1" onchange="myfunction();"/> 
    <label for="first">First</label> 
    <input type="radio" name="langs" id="second" value="2" onchange="myfunction();"/> 
    <label for="second">Second</label> 
    </fieldset> 
</div> 

Y luego:

function myfunction(){ 
    if($("#langs option:selected")){ 
    //do something, for example 
     alert($("#langs option:selected").text()); 
    } 
} 

Ésta llamará a la función de una sola vez, ya que es contenían dentro del elemento que necesita usos eso.

6

¿Esto funciona para usted? Tras la jQM Docs

HTML:

<div data-role="page"> 
    <fieldset data-role="controlgroup"> 
     <legend>Choose a language:</legend> 
     <input type="radio" name="langs" id="english-lang" value="en" /> 
     <label for="english-lang">English</label> 
     <input type="radio" name="langs" id="korean-lang" value="ko" /> 
     <label for="korean-lang">Korean</label> 
    </fieldset> 
</div>​ 

JS:

$("input[name=langs]:radio").bind("change", function(event, ui) { 
    console.log('Lang: '+$(this).val()); 

    // Call function here 
}); 
+0

.bind() está en desuso a partir de jQuery 1.7, y el método preferido para enlazar eventos es .on() (directamente del documento) . – artamonovdev

Cuestiones relacionadas