2012-05-30 5 views
5

私は行があるテーブルを持っています。行にはTD(チェックボックス付き)があり、TDにはクリック機能があります。 TDがクリックされると、チェックボックスがオン/オフになります。knockoutjsチェックボックスをオンにして、親tdをクリックしてください

私はTDをクリックしたとき、それが正常に動作しますが、チェックボックスをクリックすると、チェックボックスの(視覚的な)値は変化しません(それは/未チェックにチェックされません)

希望の状況は次のとおりです。

  1. 私は、チェックボックス、チェックボックスの変更(視覚的な)値をクリックして、私は関数を呼び出すことができます。(例えばAJAX呼び出しを作るために)

  2. 私はTDをクリックすると、チェックボックスの(視覚的な)値が変化し、私は関数。 (例えば、AJAXコールを行う)

私たちはこれをどのように達成できますか?チェックボックスをクリック

Sample Code

答えて

1

。それは全体の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のイベントは、入力のチェックをクリックしてイベントを上書きしているようだ

10

問題TD火災のためのクリックハンドラはまた、あなたがcheckboxデフォルトのクリックハンドラの両方で変更されます意味checkboxを、クリックしたときにということですcheckboxの場合はTDのカスタムクリックハンドラ(お互いを相殺します)の場合解決策は、checkboxのクリックがTDにバブリングするのを防ぐことです。あなたはこのバインディングでノックアウトでこれを行うことができます:click:function(){return true}, clickBubble:false

は、ここでは、アクションである:http://jsfiddle.net/mbest/Eatdh/12/

私は思います、しかし、labelを使用して、より良いアプローチは(私の他の回答を参照)であること。

+0

これは、HTMLの追加の混乱を防ぎます。 – Tyrsius

+1

'label'はこの問題のシナリオの方が良いアプローチかもしれませんが、クリックハンドラが' tr'全体にあるので、これは私が必要とした解決策です。 –

0

これは非常に乾燥していないが、その迅速かつ機能:より大きなエリアクリッカブルを作るためにlabel要素を使用して、クリックイベントの問題を回避するにはfiddle

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

他の方法もあります:checkboxのデータバインドを 'checked:checkBox、click:function(){return true;}、clickBubble:false'に変更します。あなたの中では、チェックボックスがチェックされてからチェックが外され、それをクリックすると再びチェックされます。 –

+0

@MichaelBestこれまでのところ、これは最高の解決策だと思います。なぜそれを答えとして掲示しないのですか? – Tyrsius

+0

私はそれを私の答えに加えます。 –

関連する問題