2012-04-27 4 views
1

저는 웹에서 많은 검색을 수행했으며 $('#checkbox').attr('checked')을 문자열로 처리하고 다른 것은 부울로 취급하는 예제를 발견했습니다.

$('#AcceptAgreement').attr('checked', false); 

하지만이 일하지 않습니다 : 내 경우

, 나는 예상대로이 사항이 작동하는 것을 발견

if ($('#AcceptAgreement').attr('checked') == true) 

두 번째 문이 때문에 실제로 값이 '체크 거짓 '.

그래서 어떤가요? 문자열 또는 부울 값입니까, 어떻게 그것을 신뢰할 수있는 방식으로 읽고 쓸 수 있습니까?

+0

그냥 사용 '확인'속성 상태를 변경하려면 속성을 사용할 수 없습니다. prop()는 부울 만 받아 들인다. attr은 둘 다 받아들이지 만 느려지거나 요소의 속성에 접근하는 적절한 방법이 아닐 수도있다. " – Ohgodwhy

+0

IE가'checked = '로 체크 박스를 허용했을 때, 1'','disabled = 'true''라고 말하면서 다른 브라우저에서는 볼 수 없을 수도 있습니다. –

답변

3

이것은 사용중인 jQuery 버전에 따라 다릅니다.

checked은 속성 및 속성입니다. 이전 버전의 jQuery에서는 항상 .attr()이 속성이 아닌 속성을 반환했습니다.이 속성은 일반적으로 부울 값이었습니다. 최신 버전의 jquery (1.6+)에는 .prop이라는 부울 속성 값을 반환하는 새로운 메서드가 있지만 .attr()은 이제 올바르게 문자열 값을 반환합니다. 속성이 변경 될 때 특성이 항상 업데이트되는지 확실하지 않습니다.

$('#AcceptAgreement').attr('checked', 'checked'); 

가 사용할 수 선택된 경우 당신이 알고 싶어하는 경우 :

if($('#AcceptAgreement').attr('checked')) 
+0

소리가 맞습니다. 내가 1.7.1을 가지고있는 것처럼 보입니다. 지금까지 안정적으로 작동하고있는 것 같습니다. –

1

문자열이지만 jQuery를 사용하여 부울 값으로 설정하면 그에 따라 속성이 변경됩니다. 이 값을 "false"로 설정하면 attr('checked')undefined을 반환합니다.

+0

jQuery의 디자이너는 설정 만하고 싶지만 읽지는 않는다고 가정 했습니까? –

+0

@Jonathan Wood : 나는 그들의 마음을 볼 수 없다. 나는 그들이 한 일을 알고 있습니다.: P –

+0

@JonathanWood'.attr'이 실제로 부울 값을 반환했을 때'.prop' 메쏘드를 추가하기 전에 만들어진 것입니다. –

0

당신이 사용해야 작성하려면

$('#isAgeSelected').is(':checked') ? /*true*/ : /*false*/ ; 
+0

그러나 첫 번째 스 니펫은 내가 한 것처럼 작동하며, 두 번째 스 니펫은 제 질문에서 설명한 문제를 유발합니다. –

0

당신이 사용할 수 있습니다

if ($('#AcceptAgreement').is(':checked')) 
{ 
    //... 
} 

또는 shortend을 :

1

지금은 순수 문자열을 반환,

console.log(typeof $('#AcceptAgreement').attr('checked')); 

그러나 jQuery를 1.7 이전

, 그것은 속성 값을 반환하는 데 사용되는 데이터 타입을 알아내는 기본적인 방법이있다.

또 다른 대체 값은 .prop('checked')이며 부울을 반환합니다.

4

아마 당신은`당신은 거의 항상 소품() 메소드가 아닌 ATTR() 메소드를 원하는 DOM 노드

$('#AcceptAgreement')[0].checked = false 
if ($('#AcceptAgreement')[0].checked) 
+0

+1. 그것에 대해 아마 "아마". 확실히 가장 현명하고 신뢰할 수있는 옵션입니다. –

관련 문제