2012-08-29 95 views
0

我有表格,而且我希望通過單擊複選框來選中/取消選中框,但是也可以單擊任意行。
代碼在這裏:source
但是,只有當我點擊行時,代碼才能正常工作。當我點擊複選框時,邏輯運作良好,但不復選框。 PS:數值selectedAnimals中的值應該是動物對象,不僅是ID或名稱淘汰賽,複選框無法正常工作

PS2。使用jQuery

$("table").on("click", "tbody tr", function(e){ 
     ko.dataFor(this).isSelected(!ko.dataFor(this).isSelected()) 
    }) 

一切運作良好,但我想這樣做不用其他的jQuery

回答

1

這裏是當你選中該複選框發生的事情:

  • 項目被檢查&添加到陣列中(正確) 。
  • 由於事件冒泡而調用add函數(複選框位於TR中,該函數添加了點擊函數)。
  • 此功能再次翻轉複選框,這將導致它從列表中刪除並取消選中。

你不能阻止事件中使用checked:綁定時起泡,所以要做到這一點,最好的辦法是從整體TR刪除add功能,並將其移動到它自己的TD

Here's the Fiddle

+0

是的,它的工作原理,但如果我有更多的一列​​,那麼我必須設置data-bind =「click ... for-each? – Ilya

+0

不幸的是,你可以看看[綁定沒有容器元素](http://knockoutjs.com/documentation/foreach-binding.html#note_3_using_foreach_without_a_container_element)來獲得DRY代碼,但你會得到更多的嵌套數組。 – MarcoK