Click事件被jQuery劫持而不是淘汰赛

时间:2014-01-17 18:09:03

标签: javascript knockout.js

我正在使用Knockout webmail tutorial作为我正在处理的单页应用程序的模板。

但是我在实现点击活页夹方面遇到了麻烦,我之前有过这样的事情,但他的点击事件被劫持了。

我的视图模型有一个功能:

var self = this;
self.goToItem = function(item) { location.hash = "#/Item/" + item.id };

这是标准的。

<h2>Saved Items</h2>
<div data-bind="foreach: savedItems">
  <div data-bind="click: $root.goToItem">
    <p data-bind="text: name"></p>
  </div>
</div>

我试过了:

<pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

但是,有意思的是,虽然foreach有数据可以循环播放,但它仍然是空的。

现在的问题是鼠标点击现在被jQuery捕获了,我之前没有必须深入研究,但我确信没有jQuery的淘汰赛。目前我使用的唯一jQuery是Ajax调用。

那么我该去哪里检查DOM对象上的事件,最好是在Chrome中?

jQuery怎么能进入?

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用clickBubble绑定?

  

防止事件冒泡

     

默认情况下,Knockout将允许click事件继续冒泡到任何更高级别的事件处理程序。例如,如果您的元素和该元素的父元素都处理click事件,则将触发两个元素的单击处理程序。如有必要,可以通过包含名为clickBubble的附加绑定并向其传递false来阻止事件冒泡,如下例所示:

<div data-bind="click: myDivHandler">
    <button data-bind="click: myButtonHandler, clickBubble: false">
        Click me
    </button>
</div>
  

通常,在这种情况下,首先调用myButtonHandler,然后click事件将冒泡到myDivHandler。但是,我们添加的值为false的clickBubble绑定会阻止事件通过myButtonHandler。

有关点击约束的更多详情,请访问http://knockoutjs.com/documentation/click-binding.html

答案 1 :(得分:0)

如果我更换了

click: $root.goToItem

click: goToItem

它再次起作用。

似乎jQuery事件触发是一个红色的鲱鱼,我把它比作一个工作系统,它开始于jQuery。我不得不重新调试我的DOM调试,这不是坏事。

$ root 是否超级,其他人需要向我指出这一点。我确信在foreach循环中你只能通过$ root访问$ root函数。