2012-06-08 26 views
6

我有一組單選按鈕,名稱相同,但值不同。我想這樣做:如何在單選按鈕上獲得onchange回調,但只有設置的那個回調函數

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

這個工作,但是當我點擊一個新的單選按鈕的MyFunction被調用兩次:一次是爲「老」單選按鈕被自動選中獲得,並且一次我點擊的新的一個。

將onchange改爲onclick並不是一個解決方案,因爲我將它與jquery-mobile一起使用,並且它用標籤包裝輸入,因此標籤被點擊而不是輸入。

回答

6

您可以通過$(this)作爲參數傳遞給myfunction,然後裏面myfunction檢查,如果單選按鈕被選中

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

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

我可能做錯事,但我必須做$(elem).is(':checked')才能使其工作 – w4ik

0

據我所知,你沒有任何限制使用onclick evente jquery在標籤中。如果你有一個ID,你可以使用它。 比方說,你有以下的html:

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

在你的jQuery您可以添加:

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

同樣給其他無線按鈕的標籤

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

希望這有助於。 路易斯·M.

0

如何嘗試喜歡的東西:

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

然後:

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

這應該調用該函數只有一次,因爲它是需要使用元素中包含它。

6

這是否對你的工作?繼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()從jQuery 1.7開始被棄用,綁定事件的首選方法是.on()(直接來自doc) 。 – artamonovdev

相關問題