我在表格中有一个复选框列。我想只在用户点击复选框时触发事件。但是,就我而言,即使在绑定表行时,偶数也会被触发。
视图模型上的事件
self.UpdateData = function (item, value) {
$.ajax({
})
});
这就是我绑定它的方式。
data-bind="checked: flag, click: $root.UpdateData($parent.RowNumber(), flag())"
有人能让我知道为什么在渲染表格行时会触发UpdateData()
事件吗?
答案 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"