根据按钮ID检测单选按钮更改

时间:2011-09-25 10:15:14

标签: javascript jquery forms

在某些情况下,我必须检测单选按钮的变化。问题是app只有它感兴趣的按钮的ID。例如,给定HTML片段:

<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-other”,每次用户检查或取消选中“其他类型”按钮时,应用程序必须执行一些代码。当用户点击此单选按钮或用户点击任何其他按钮取消选中之前的“其他类型”选中按钮时,必须执行代码 。如果用户单击DM1然后单击DM2,则不应执行该功能。这是我的方法:

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

问题在于代码是当用户点击“其他类型”时触发的功能,但是当用户取消选中此功能时则触发。

其他方法是获取无线电名称,然后执行以下操作:

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

现在问题是这个功能总是在任何按钮点击时被触发,我只需要在用户检查或取消选中给定的单选按钮时触发该功能。您可以使用this jsfiddle

1 个答案:

答案 0 :(得分: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');
    });
});