2011-09-25 52 views
2

在某些情況下,我必須檢測單選按鈕更改。問題是應用程序只有它感興趣的按鈕的ID。例如,給定該HTML片:根據按鈕ID檢測單選按鈕更改

<label class="required">Type</label><br/> 
<span class="vertical"> 
    <input checked="checked" id="diabetes_type-none" name="diabetes_type" type="radio" value="none" /><label for="diabetes_type-none">No diabetes</label><br /> 
    <input id="diabetes_type-dm1" name="diabetes_type" type="radio" value="dm1" /><label for="diabetes_type-dm1">DM1</label><br /> 
    <input id="diabetes_type-dm2" name="diabetes_type" type="radio" value="dm2" /><label for="diabetes_type-dm2">DM2</label><br /> 
    <input id="diabetes_type-other" name="diabetes_type" type="radio" value="other" /><label for="diabetes_type-other">Other type</label> 
    <input class="small free" id="diabetes_type-other_more" name="diabetes_type-other_more" type="text" /> 
</span> 

和給出的ID「diabetes_type - 其他」應用程序必須執行一些代碼每次用戶檢查或取消選中「其他類型」按鈕。代碼只有必須在用戶單擊此單選按鈕時執行,或者當用戶單擊任何其他按鈕時取消選中先前的「其他類型」選中按鈕。如果用戶點擊DM1然後點擊DM2,則不應執行該功能。這是我的方法:

$("#" + _var).change(function() { 
    alert('changed'); 
}); 

問題這裏是代碼是當用戶點擊「其他類型」,而不是當用戶取消選中這個被觸發的功能。

另一種方法是獲得無線電的名字,然後做這樣的事情:

_radioName = "diabetes_type"; // Obtain programmatically 
$("input[name=" + _radioName + "]").change(function() { 
    alert('changed'); 
}); 

現在的問題是這樣的功能總是觸發,在任何按鈕點擊我需要的功能,只觸發時用戶檢查或取消選中給定的單選按鈕。你可以玩this jsfiddle

回答

4

小提琴http://jsfiddle.net/sn7eU/1/
檢查這個代碼,它應該滿足您的願望:

var _radioName = "diabetes_type"; // Obtain programmatically 
var _var = "diabetes_type-other"; 

#(document).ready(function(){ 
    var lastChecked = false; 
    $("input[name=" + _radioName + "]").change(function() { 
     if(this.id == _var) lastChecked = true; 
     else if(lastChecked){ 
      /*The radio input isn't "other". Check if the last checked element equals 
      "other" (lastChecked == true). If true, set lastChecked to false*/ 
      lastChecked = false; 
     } else return; /*The input isn't "other", and the last checked element isn't 
         "other". Return now. */ 

     alert('changed'); 
    }); 
});