绑定表行时会触发复选框单击事件

时间:2013-09-26 03:25:44

标签: knockout.js

我在表格中有一个复选框列。我想只在用户点击复选框时触发事件。但是,就我而言,即使在绑定表行时,偶数也会被触发。

视图模型上的事件

 self.UpdateData = function (item, value) {               
                $.ajax({                       
                })
            });

这就是我绑定它的方式。

 data-bind="checked: flag, click: $root.UpdateData($parent.RowNumber(), flag())" 

有人能让我知道为什么在渲染表格行时会触发UpdateData()事件吗?

1 个答案:

答案 0 :(得分:2)

首先,Knockout不允许您为click绑定提供表达式。如果您对以这种方式绑定感兴趣,请查看我的Knockout.Punches插件。如果没有,则必须将表达式包装在匿名函数中:

click: function() { $root.UpdateData($parent.RowNumber(), flag()); }

其次,执行此操作后,您会发现另一个问题。您的click处理程序将阻止更改复选框,因为默认情况下,Knockout会在绑定时阻止事件的默认行为。要启用默认行为,您需要将return true添加到函数:

click: function() { $root.UpdateData($parent.RowNumber(), flag()); return true; }

第三,我建议你尽量避免在复选框中添加click绑定。您已经拥有checked绑定,它使用复选框的状态更新observable。您还可以选择将checked绑定到数组,在这种情况下,它会从数组中添加或删除复选框的值:

data-bind="attr: {value: $parent.RowNumber()}, checked: $root.selectedRows"