2012-06-08 4 views
6

war Ich habe eine Gruppe von Optionsfeldern mit dem gleichen Namen, aber unterschiedlichen Werten. Ich mag wie etwas tun:Wie bekomme ich den Rückruf auf Radiobuttons, aber nur der, der SET

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

Dies funktioniert, aber wenn ich auf einem neuen Radiobutton myfunction klicken wird zweimal aufgerufen: einmal für den „alten“ Radio-Button, der automatisch nicht markiert wird immer, und einmal für die neue, auf die ich klicke.

onchange ändern onchange ist keine Lösung, weil ich es mit jquery-mobile verwende und es die Eingaben mit Label umschließt, so dass das Label geklickt wird, nicht die Eingabe.

Antwort

6

Sie können $(this) als Argument an myfunction passieren und dann in myfunction überprüfen, ob das Optionsfeld

geprüft

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

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

ich wohl etwas falsch zu machen bin, aber ich musste $ (elem) .is (': checked') tun, damit dies funktioniert – w4ik

0

Soweit ich weiß, haben Sie keine Einschränkung, onclick evente mit jquery in einem Label zu verwenden. Wenn Sie eine ID haben, können Sie sie verwenden. Angenommen, Sie haben die folgende html haben:

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

In Sie JQuery Sie könnte hinzufügen:

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

Das Gleiche gilt für die anderen Label des Radiobutton

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

Hoffnung, das hilft. Luis M.

0

Wie wäre es versuchen, so etwas wie:

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

Und dann:

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

Dieser Aufruf der Funktion sollte nur einmal, wie es innerhalb des Elements enthalten ist, die Anwendungen benötigt es.

6

Ist diese Arbeit für Sie? die folgende 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() ist ab jQuery 1.7 veraltet, und die bevorzugte Methode zum Binden von Ereignissen ist .on() (direkt aus dem Dokument) . – artamonovdev