当我在敲除 table 行中单击复选框时,tr click 事件会覆盖复选框状态更改
When I click a checkbox in a knockout table row, the tr click event overrides the checkbox state change
我有一个带复选框的淘汰赛 table(对于此处的示例,我限制每行一个复选框)。
单击复选框时,它应该翻转状态(如您所料)。
但是,我在 table 行上也有一个点击事件和 select 事件,这与复选框冲突...
<table>
<tbody data-bind="foreach: namespace.divResults.model">
<tr data-bind="click: $root.selectItem, css: {selected: $root.isSelected($data)}">
<td data-bind="text: Title"></td>
<td data-bind="text: Surname"></td>
<td data-bind="text: PostCode"></td>
<td><input type="checkbox" data-bind="checked: Excluded, click: $root.toggleExcluded"></td>
<td data-bind="text: Notes" style="display:none"></td>
<tr>
<tbody>
<table>
<div>
<!-- ko with: $root.selectedItem -->
<textarea data-bind="textInput:Notes"></textarea>
</div>
和javascript:
(function(ns) {
ns.divResults = null;
var resultsViewModel = function() {
var self = this;
self.model = ko.observableArray();
self.selectedItem = ko.observable();
self.selectItem = function(row){ self.selectedItem(row); }
self.isSelected = function (row) { return self.selectedItem() === row; }
self.toggleExcluded = function() {
return true;
}
}
}
我试过使用 clickBubble 事件,但这会阻止 table 行上的点击事件的操作,在任何情况下都可以正常工作。
我发现单击行的复选框会正确更改其状态,但当行单击执行其操作时又会返回。
我使用了一个实际的复选框,不确定这是否是您的要求,无论如何这是带有复选框的列
<td>
<input type="checkbox" data-bind="checked: Excluded"/>
</td>
具有选中绑定的复选框处理设置排除标志并同时选中复选框。在行中单击处理程序 I return true 允许事件向下传播到复选框,否则复选框将不起作用,因为事件不会向下传播到它
self.selectItem = function (row) {
self.selectedItem(row);
return true;
};
这是一个带有工作示例的 fiddle,我在底部添加了一个输入,它也显示了已排除的状态
我有一个带复选框的淘汰赛 table(对于此处的示例,我限制每行一个复选框)。 单击复选框时,它应该翻转状态(如您所料)。 但是,我在 table 行上也有一个点击事件和 select 事件,这与复选框冲突...
<table>
<tbody data-bind="foreach: namespace.divResults.model">
<tr data-bind="click: $root.selectItem, css: {selected: $root.isSelected($data)}">
<td data-bind="text: Title"></td>
<td data-bind="text: Surname"></td>
<td data-bind="text: PostCode"></td>
<td><input type="checkbox" data-bind="checked: Excluded, click: $root.toggleExcluded"></td>
<td data-bind="text: Notes" style="display:none"></td>
<tr>
<tbody>
<table>
<div>
<!-- ko with: $root.selectedItem -->
<textarea data-bind="textInput:Notes"></textarea>
</div>
和javascript:
(function(ns) {
ns.divResults = null;
var resultsViewModel = function() {
var self = this;
self.model = ko.observableArray();
self.selectedItem = ko.observable();
self.selectItem = function(row){ self.selectedItem(row); }
self.isSelected = function (row) { return self.selectedItem() === row; }
self.toggleExcluded = function() {
return true;
}
}
}
我试过使用 clickBubble 事件,但这会阻止 table 行上的点击事件的操作,在任何情况下都可以正常工作。 我发现单击行的复选框会正确更改其状态,但当行单击执行其操作时又会返回。
我使用了一个实际的复选框,不确定这是否是您的要求,无论如何这是带有复选框的列
<td>
<input type="checkbox" data-bind="checked: Excluded"/>
</td>
具有选中绑定的复选框处理设置排除标志并同时选中复选框。在行中单击处理程序 I return true 允许事件向下传播到复选框,否则复选框将不起作用,因为事件不会向下传播到它
self.selectItem = function (row) {
self.selectedItem(row);
return true;
};
这是一个带有工作示例的 fiddle,我在底部添加了一个输入,它也显示了已排除的状态