2013-04-05 2 views
11

저는 jQuery로 라디오 버튼을 프로그램 적으로 선택하려고했습니다. 체크 된 속성을 변경하는 것만 큼 간단 할 것 같았습니다.jQuery 1.9.1에 라디오 버튼이있는 버그가 있습니까?

그러나 다음 코드는 Chrome/Firefox의 jQuery 1.9.1에서 예상되는 것을 수행하지 않습니다.

예상 동작 : 라디오 버튼 -> 'checked'속성을 포함하는 div를 클릭하면 DOM에서 체크 된 렌더링이 렌더링됩니다.

실제 동작 : 라디오 버튼 -> 'checked'속성을 포함하는 div를 클릭하면 첫 번째 및 두 번째 버튼이 클릭되어 DOM에 체크 된 렌더링이 렌더링되고 이후 버튼은 체크 된대로 렌더링되지 않습니다.

jQuery를 : - 예상대로 내가 이전의 jQuery 버전 및 모든 작품과 같은 코드를 시도했습니다 http://jsfiddle.net/GL9gC/

$('div.form-type-radio').on('click', function() {  
    var Id = $(this).find('input[type=radio]').attr('id'); 
    $('form input[type=radio]:not(#'+Id+')').removeAttr('checked'); 
    $('#' + Id).attr('checked', 'checked');  
    console.log($('#' + Id));  
}); 

는 여기 jsFiddle입니다.

+1

아니 도대체 당신은 요소를 얻을 이유 , 그 다음 ID 및 몇 가지 아래 줄은 ID를 사용하여 요소를 다시 얻습니다. ('not'는 요소들과도 잘 맞습니다). – adeneo

+0

일부 머리 긁기와 디버깅에서 방금 남겨 두었던 것입니다. 단지 내가 확실히 가지고있는 것이 확실합니다. (즉, 입력 [type = radio] ', this) .prop ('checked ', true) ID. – Simon

답변

20

이 경우 attr()/removeAttr() 대신 prop()을 사용해야합니다.

다음은 작동하는 jsFiddle입니다.

jQuery를 :

$('div.form-type-radio').on('click', function() { 
    var Id = $(this).find('input[type=radio]').prop('id'); 
    $('form input[type=radio]:not(#'+Id+')').prop('checked'); 
    $('#' + Id).prop('checked', 'checked'); 
    console.log($('#' + Id)); 
}); 
+4

고마워, 내가 이걸 읽었어야한다고 생각해. (jQuery 문서) : "그럼에도 불구하고 checked 속성에 대해 기억해야 할 가장 중요한 개념은 checked 속성과 일치하지 않는다는 것입니다. 속성은 실제로 defaultChecked 체크 박스의 초기 값을 설정하기 위해서만 사용되어야하며 체크 된 속성 값은 체크 박스의 상태에 따라 변하지 않으며 체크 된 속성은 변경되지 않습니다. 체크는 " – Simon

+0

속성을 사용하는 것입니다. 이유는 attr이 2.1.4를 사용하는 프로젝트에서 작동하지 않는 이유를 이해할 수 없기 때문입니다. 알아 둘만한. –

2

LIVE DEMO

$('div.form-type-radio').on('click', function() {  
    $(this).find(':radio').prop({checked: true}); 
}); 
는이 일과 아무 상관이 있지만 것을

http://api.jquery.com/prop/

관련 문제