我有一个场景,其中Click事件绑定到<tr>
,并且检查的值绑定到<td?
内<tr>
内的复选框。现在问题是当单击该行时,事件被触发就好了。但是,如果我单击该复选框,则可观察值也会更改为行,并触发行单击事件。如何避免这种情况
<tbody data-bind="foreach:Mails">
<tr data-bind="click:$root.navigateToMail">
<td style="width: 15px">
<input type="checkbox" data-bind="checked: isSelected">
@*<input type="checkbox">*@
</td>
<td data-bind="text: From">
</td>
<td data-bind="text: To">
</td>
<td data-bind="text: Subject">
</td>
<td data-bind="text: MailDate">
</td>
</tr>
</tbody>
事件是:
ko.utils.arrayForEach(data.mails, function (mail) {
mail.isSelected = ko.observable(false);
mail.isSelected.subscribe(function (myvalue) {
console.log(myvalue);
});
});
self.navigateToMail = function (mail) {
location.hash = mail.Folder() + '/' + mail.Id();
};
我修剪了不必要的代码。只是把问题发生了。
答案 0 :(得分:24)
您基本上需要在点击时取消冒泡活动。
以下是您如何做到这一点的示例:
<div data-bind="click: parentClick">
<input type="checkbox" data-bind="checked: isSelected, click: function(){return true}, clickBubble: false">
</div>