Не удается снять флажок после выбора другого - PullRequest
2 голосов
/ 16 июля 2010

Вот мои настройки: если radiobutton1 уже проверено, когда страница загружается (у нее checked="checked" в исходном виде), и я пытаюсь снять флажок после выбора radiobutton2, атрибут checked на radiobutton1не удаляется после выбора radiobutton2:

if($('#' + radiobutton1_ID).is(':checked'))
    UncheckRadioButton('#' + radiobutton2_ID);

// Utility function to clear a radiobutton's "checked" attribute
function UncheckRadioButton(radiobuttonID) {
    radiobuttonID.removeAttr("checked"); 
}

После выбора radiobutton2 и выполнения «Просмотр источника» я не вижу checked="checked" на radiobutton2 (, даже если на странице отображаетсяэта кнопка отмечена ), а для radiobutton1 она все еще показывает checked="checked".Это почему?Это должно быть наоборот.


ОБНОВЛЕНИЕ

Вот еще мой код.Я знаю, что части оператора if получают удар, так что это не проблема, и я знаю, что идентификаторы переключателей (ccRadioBtn, checkRadioBtn и paypalRadioButton), которые я использую, являются правильными:

    var ccRadioBtn = ccRadioButton; // credit card radio button ID
    var paypalRadioButton = payPalRadioClientID;

    // ...

    if (paypalIsSelected()) {
        UncheckRadioButton(checkRadioBtn);
        UncheckRadioButton(ccRadioBtn);

        // ...
    } else {
        // force a clear on any previously selected payment options
        CheckRadioButton(ccRadioBtn); // default to credit card radio button
        UncheckRadioButton(paypalRadioButton);
        UncheckRadioButton(checkRadioBtn);

        // ...
    }
}

function UncheckRadioButton(radiobuttonID) {
    $('#' + radiobuttonID).removeAttr("checked"); 
}

function CheckRadioButton(radiobuttonID) {
    $('#' + radiobuttonID).attr('checked', true);
}

Проблема в том, что: если одна радиокнопка имеет значение по умолчанию checked="checked", и я нажимаю другую радиокнопку, атрибут checked первой радиокнопки должен быть удален, но это не так.И у второй выбранной радиокнопки нет checked="checked", как и должно быть.Я вижу это при просмотре исходного кода страницы.Я не уверен, почему это не работает.

1 Ответ

5 голосов
/ 16 июля 2010

Вы передаете строку здесь:

UncheckRadioButton('#' + radiobutton_2_ID);

Но здесь мы пытаемся использовать его как объект jQuery:

radiobuttonID.removeAttr("checked");
//which is actually doing this:
"#something".removeAttr("checked"); //.removeAttr() is not a function for string

Вам нужно обернуть его, чтобы использовать в качестве селектора, например:

$(radiobuttonID).removeAttr("checked");

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

...