2010-07-15 2 views
2

Вот моя установка: Если radiobutton1 уже проверяется при загрузке страницы (он имеет checked="checked" в источнике зрения), и я стараюсь, чтобы снять его после выбора radiobutton2, атрибут на radiobutton1checked является не получает удалено после выбора 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 и делать «View Source» Я не вижу checked="checked" на radiobutton2 (даже если страница не показывает эту кнопку, как проверенные), и для radiobutton1 он все еще показывает checked="checked". Почему это? Это должно быть наоборот.


UPDATE

Вот еще некоторые из моего кода. Я знаю, что 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", как и следовало ожидать. Я вижу это, когда просматриваю источник страницы. Я не знаю, почему это не работает.

+0

Я обновил свой пост с помощью своего фактического кода. Проблема все еще существует. – PositiveGuy

+0

Проблема закончилась тем, что не была проблемой JS, но я получил много из этой темы. Спасибо всем, кто ответил. – PositiveGuy

ответ

5

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

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, например, покажет оригинал источник страницы, а не состояние, которое вы просматриваете в данный момент.

+0

спасибо, что это был долгий день, я этого не осознавал. – PositiveGuy

+0

Он все еще не работает. Я не знаю, почему, но опять же, если я выбираю radobutton1, посмотрите источник, который он проверил = «проверено», как и ожидалось. Но после того, как я меняю и выбираю radobutton2, а затем просматриваю источник, radobutton1 все еще проверил = «checked», а radioobutton2 вообще не имеет проверенного атрибута. Есть ли что-то, что я не знаю о DOM здесь? Может быть, источник просмотра не отражает текущее состояние? Смысл, если я перейду на радиообъект2 после радиообмена1, состояние не реализуется до обратной передачи? – PositiveGuy

+0

@coffeeaddict - проверен ли пользовательский интерфейс, а не источник просмотра? также какой браузер вы используете? Вы должны использовать Chrome или Firebug и обследовать элемент для получения точного * текущего * представления. –