2011-09-27 10 views
0

HTML :체크 박스를 체크 검증

<div> 
    <input> 
    <label> 
</div> 

JS : 내가 입력을 클릭 할 때마다

$('div input').live('click',function(){ 
    alert($(this).is(':checked')); 
}); 
$('div').live('click,'function(e){ 
    if(!$(e.target).is('input')) 
     $(this).find('input').click(); 
}); 

정확하게
(나는 사실 경고 입력에 설정 한 경우) 입력이로 변신 어떤 표시 하지만 div/label을 클릭 할 때마다 그 반대가됩니다 (입력이 켜지면 false로 경고합니다)

입력이 1 대신에 양쪽 상황에서 켜지거나 꺼져 있는지 테스트하는 방법이 있습니까?


는 [나는이 일 때문에 일어나는 이유가 JQuery와 전에 일어나는 브라우저에 의해 유발된다고 가정 (내가 먼저 발생해야 jQuery를 가정하더라도, 그러나 무엇이든)와 다른 경우 JQuery와는 전에 실행 트리거는 'checked'를 트리거하지만 스크립트가 끝날 때까지 트리거를 연기하거나 스크립트 전에 실행하는 방법을 알아낼 수 없습니다.

미리 감사드립니다!

+0

? 레이블을 클릭하려는 의도가 있거나'

답변

2

체크 박스 자체에서 change()을 모니터링 한 다음 DIV를 클릭하여 확인란의 값을 직접 변경 한 다음 click() 대신 change()을 트리거 할 수 있습니다.

$('input[type="checkbox"]').live('change',function(){ 
    alert($(this).is(':checked')); 
}); 

$('div').live('click',function(e){ 
    if(!$(e.target).is('input')) { 
     var $input = $(this).find('input'); 
     $input.prop("checked", !$input.is(':checked')).change(); 
    } 
}); 

또한 <label for="" /> 성가심을 피하기위한 목적이라면이 부분을 확인하십시오.

<label><input type="checkbox" value="awesome" /> Check it</label> 
+0

이 있으면 자동으로 수행 할 체크 박스의 선택을 취소하십시오. 그러면 작동이 끝납니다 (ish). 내 버전의 jquery는 .prop 메서드를 지원하지 않으므로 .prop에서 .attr로 변경해야했습니다. 변화 대 클릭을 사용하여 좋은 아이디어. –

1

이 시도 :

당신이 달성하려고하는 무엇
$('div input').live('click',function(){ 
    alert($(this).is(':checked')); 
}); 
$('div').live('click,'function(e){ 
    if(!$(e.target).is('input')) 
     $(this).find('input').triggerHandler("click"); 
}); 
+0

'jQuery.triggerHandler()'는 live가 해당 요소가 아닌 문서에서 이벤트를 관찰하고'triggerHandler()'가 버블 링을 일으키지 않기 때문에'jQuery.live()'와 함께 작동하지 않습니다. 처리기를 트리거하기 전에 확인란을 업데이트하기 위해 응답을 연장해야합니다. 건너 뛰는 브라우저의 기본 동작이며 확인란 값을 업데이트하는 브라우저이기 때문입니다. –

+0

방금이 작업을 시도했으며 Mike가 말했듯이 불행하게도 작동하지 않습니다. –

관련 문제