2011-09-25 7 views
2

일부 경우에는 라디오 버튼 변경 사항을 감지해야합니다. 문제는 앱이 관심있는 버튼의 ID 만 갖고 있다는 것입니다.버튼 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 - 다른"응용 프로그램이 몇 가지 코드마다 사용자 검사를 실행하거나 "다른 종류"버튼을 선택하거나 선택 취소합니다 주어진 예를 들어, HTML 조각 주어진. 코드는 사용자가이 라디오 버튼을 클릭하거나 사용자가 다른 버튼을 클릭하여 이전의 "기타 유형"체크 된 버튼을 선택 취소 할 때 실행되어야합니다. 사용자가 DM1을 클릭하고 DM2를 클릭하면 함수가 실행되지 않아야합니다. 여기

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

문제 코드가 사용자가 "다른 종류"하지만하지 않을 경우 사용자 선택 취소이를 클릭 할 때 트리거되는 기능입니다 : 이것은 나의 접근 방식입니다.

다른 접근 방법은 라디오 이름을 얻을 수 있도록 다음과 같은 일을 할 :

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

이제 문제는이 기능은 버튼 클릭에 항상 트리거되고 난 경우 사용자 만 트리거 할 수있는 기능이 필요합니다 주어진 라디오 버튼을 체크하거나 체크하지 않는다. this jsfiddle으로 게임을 할 수 있습니다.

답변

4

바이올린 :

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'); 
    }); 
}); 
: http://jsfiddle.net/sn7eU/1/
이 당신의 소원을 충족해야합니다,이 코드를 검사