Обнаружение изменений переключателей на основе идентификатора кнопки - PullRequest
2 голосов
/ 25 сентября 2011

В некоторых случаях мне приходится обнаруживать изменения переключателей.Проблема в том, что приложение имеет только идентификатор интересующей кнопки.Например, учитывая тот фрагмент 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>

и идентификатор "diabetes_type-other", приложение должно выполнять некоторый код каждый раз, когда пользователь проверяет или снимает флажок с кнопки "Другой тип".Код только должен выполняться, когда пользователь нажимает эту радиокнопку или когда пользователь нажимает на любую другую кнопку, снимая отметку с предыдущей отмеченной кнопки «Другой тип».Если пользователь нажимает на DM1, а затем нажимает на DM2, функция не должна выполняться.Это мой подход:

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

Проблема здесь в том, что код запускается функцией, когда пользователь нажимает «Другой тип», но не когда пользователь снимает эту отметку.

Другой подход заключается в полученииимя радио, а затем сделайте что-то вроде этого:

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

Теперь проблема в том, что эта функция запускается всегда, при любом нажатии кнопки, и мне нужно, чтобы функция запускалась только тогда, когда пользователь проверяет или снимает флажок с данной радио кнопки,Вы можете играть с этим jsfiddle .

1 Ответ

4 голосов
/ 25 сентября 2011

Fiddle : 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');
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...