2012-05-30 4 views
5

행이있는 테이블이 있습니다. 행에 TD (체크 박스가 있음)가 있고 TD에 클릭 기능이 있습니다. TD를 클릭하면 체크 박스가 선택/선택 해제됩니다.knockoutjs 체크 박스를 클릭하고 부모를 클릭하십시오.

(이것은 선택하지 않은/확인되지 않습니다)

원하는 상황이 내가 TD를 클릭하지만, 체크 박스를 클릭하면 체크 박스의 영상, 값이 변경되지 않을 때 그것은 잘 작동 :

  1. I 체크 박스, 체크 박스의 변화 (영상) 값을 클릭 I 함수를 호출 할 수있다. I는 TD 클릭하면

  2. 을 (예는 AJAX 호출을 할) 때 체크 박스의 (시각적) 값이 바뀌고 기능. (예 : AJAX 전화 걸기)

우리는 이것을 어떻게 할 수 있습니까? 체크 박스를 클릭

Sample Code

답변

1

더 큰 영역의 클릭을 만들기 위해 label 요소를 사용, 클릭 이벤트 문제를 방지합니다. 그것은 전체 td을 차지 그래서 저는 여기에 레이블 블록 요소했습니다 :

<td> 
    <label style="display: block"> 
     <input type="checkbox" data-bind="checked: checkBox" /> 
    </label> 
</td> 

http://jsfiddle.net/mbest/LsxSh/

+0

감사합니다 !! 이것은 트릭을 수행합니다. 클릭 기능을 추가하여 조금 수정했습니다. [http://jsfiddle.net/LsxSh/4/](http://jsfiddle.net/LsxSh/4/) – Blottt

0

는 TD의 클릭 투수 코드를 호출

self.checkBox(!self.checkBox()); 

이 수표를 제거합니다.

+0

사실을 참조하십시오, 지금 문제는 우리가이 문제를 방지 할 수있는 방법입니다. 나는 정확히 내가 첫 번째 게시물에서 찾고있는 것을 지정한다. – Blottt

+0

질문을 변경했습니다 :-) –

+0

예 : P ... 제대로 형성되지 않았습니다. – Blottt

1

TD 이벤트는 입력의 체크 클릭 이벤트를 오버라이드 (override) 할 것으로 보인다

10

문제 TD 화재의 클릭 핸들러는 또한 당신이 checkbox 기본 클릭 핸들러 모두에 의해 변경됩니다 의미 checkbox을 클릭 할 때이다 checkboxTD에 대한 사용자 지정 클릭 처리기 (서로를 상대로). 해결책은 checkbox의 클릭이 TD으로 바뀌는 것을 방지하는 것입니다. 이 바인딩으로 녹아웃에서 수행 할 수 있습니다 : click:function(){return true}, clickBubble:false.

는 여기 행동에 : http://jsfiddle.net/mbest/Eatdh/12/

나는 생각하지만, label를 사용하는 것이 더 나은 방법이 (내 다른 대답을 참조)입니다.

+0

HTML 혼잡을 방지하기 때문에이 방법을 선호합니다. – Tyrsius

+1

'label'이 문제의 시나리오에서 더 나은 접근 방법 일 수 있습니다. 그러나 이것은 클릭 처리기가 전체 'tr'에 있기 때문에 필요한 솔루션입니다. –

0

이 꽤 DRY 아니라, 자사의 빠르고 기능 : fiddle

<td data-bind="click:tdClick"> 
     <input type="checkbox" data-bind="checked: checkBox, click:tdClick" /> 
</td> 
+2

또 다른 방법은 다음과 같습니다. 체크 박스의 데이터 바인딩을'checked : checkBox, click : function() {return true;}, clickBubble : false'로 변경하십시오. 귀하의 체크 박스는 선택되지 않은 상태에서 체크 된 다음 클릭하면 다시 체크됩니다. –

+0

@MichaelBest 지금까지는 이것이 최선의 해결책이라고 생각합니다. 왜 그것을 답변으로 게시하지 않습니까? – Tyrsius

+0

오른쪽. 나는 그것을 내 대답에 추가 할 것이다. –

관련 문제