【问题标题】:Preventing bubble of click from a knockout checked binding [duplicate]防止敲除检查绑定中的点击气泡[重复]
【发布时间】:2013-12-18 04:48:57
【问题描述】:

有了这个小提琴...

http://jsfiddle.net/jeljeljel/5skHX/

...请注意,当单击“单击我”链接时,tbody 元素会处理从 td 元素冒泡的单击事件。但是,当您单击复选框时,仍会调用单击处理程序。如何防止点击事件从复选框冒泡?

HTML

<table>
    <thead>
        <tr>
            <th></th>
            <th>Col 1</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                <input type="checkbox" data-bind="checked: itemSelected" />
            </td>
            <td>[Click me]</td>
        </tr>
    </tbody>
</table>
<div id="clicks" data-bind="text: clicks"></div>

JAVASCRIPT

function Model() {
    var self = this;
    self.value = ko.observable();
    self.clicks = ko.observable(0);
    self.itemSelected = ko.computed({
        read: function () {
            return self.value();
        },
        write: function (value) {
            self.value(value);
            return true;
        },
        deferEvaluation: true
    });
}
var model = new Model();
ko.applyBindings(model);

$('tbody').click(function () {
    model.clicks(model.clicks() + 1);
});

【问题讨论】:

  • 是的,我看到了,但是从我的处理程序返回 'true' 并没有解决问题。
  • 你需要click: function() { return true; }, clickBubble: false : jsfiddle.net/Q8sRF
  • 是的!这就是答案。谢谢!

标签: javascript jquery knockout.js


【解决方案1】:
...
<td id="clickmeID">[Click me]</td>
...

$('#clickmeID').click(function () {
model.clicks(model.clicks() + 1);
});

这是你想要的吗?

【讨论】:

  • 可行,但对于这个解决方案,我需要将点击处理程序附加到 tbody。
  • 这不是与 Knockout 一起使用的正确答案。
猜你喜欢
  • 2017-02-15
  • 2018-02-13
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多