2011-12-07 2 views
1

레이블을 클릭 할 때 for을 라디오 버튼의 상태를 변경하는 대신 jQuery를 사용하고 있습니다. 또한 체크 된 라디오 버튼의 수를 세는 라디오 버튼에 연결된 다른 이벤트가 있습니다.jQuery 트리거 증가 라디오 : -1 오프셋에서 길이 확인

$('label').click(function(){ 
    $(this).prev('input:radio').trigger('click'); 
}); 

$('input[type=radio]').click(function(){ 
    console.log($('input[type=radio]:checked').length); 
}); 

length의 콘솔 로그는 두 번째 등등을 클릭하고 때 다음, 첫 번째 라디오가 클릭하면 10입니다 ...

내가 무엇을 놓치고?!

감사

답변

1

사용에게 change 이벤트를 대신.

$('label').click(function(){ 
    $(this).prev('input:radio').trigger('click'); 
}); 

$('input[type=radio]').change(function(){ 
    console.log($('input[type=radio]:checked').length); 
}); 

그냥이 작업을 수행 할 수있을 때 나는 레이블 jQuery를 사용하지 않을지라도 :

<label><input type="radio" name="group">click me</label> 
+0

이것은 동일한 js를 실행하는 약 30 페이지의 업데이트입니다. 그래서 각 페이지의 html을 편집하는 대신 javascript를 사용하면 1 시간 또는 2 시간을 절약 할 수 있습니다. 감사. 이것은 효과가 있었다. –

+0

@TimJoyce : 아, 이해했다. 다행 했어. – RightSaidFred

1

라디오 버튼의 체크 상태는 후 클릭 핸들러가 반환 변경합니다.

컨트롤의 기본 동작을 금지하기 위해 처리기가 false을 반환하거나 을 호출 할 수 있기 때문에이 작업이 필요합니다. 처리기가 반환되기 전에 선택 상태가 수정 된 경우 이미 수행 한 것처럼 기본 동작을 금지 할 수 없습니다.

당신은 핸들러가 리턴 한 후 console.log()에 전화를 예약 할 수 0 지연 window.setTimeout()를 사용할 수 있습니다

$("input[type=radio]").click(function() { 
    window.setTimeout(function() { 
     console.log($("input[type=radio]:checked").length); 
    }, 0); 
}); 
+0

감사합니다. 당신의 설명에 더 많은 이해가되었습니다. @RightSaidFred 응답을 사용하기 쉽습니다. 왜냐하면 더 쉽고 작동하기도하지만 세부 사항을 고맙게 생각합니다. –

0

click 단순히 UI 동작입니다. 라디오 입력으로 처리해야하는 이벤트는 change입니다.