2014-01-17 28 views
0

我使用Knockout webmail tutorial作爲我正在處理的單頁應用程序的模板。點擊事件被jQuery劫持而不是敲除

但是我在實施的點擊粘結劑麻煩,我有這種工作之前的事情,但他的時間的點擊事件被劫持。

我的視圖模型具有這樣的功能:

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有數據要遍歷。

現在的問題是,mousevent點擊現在被抓的jQuery,我還沒有收到鑽研這個,但我相信沒有淘汰賽jQuery的運行。目前我唯一使用的jQuery用於Ajax調用。

那麼我該去檢查DOM對象上的事件,最好是在Chrome中?

jQuery如何對接?

+0

你的問題很不清楚......你說的「點擊事件被劫持」是什麼意思?點擊發生了什麼或發生了什麼? – nemesv

+0

事件使用點擊綁定註冊。但是,當事件被觸發並用事件斷點監視時,它將在jQuery中處理。我發現這令人吃驚。 – zeristor

回答

1

您是否嘗試過使用clickBubble綁定?

冒泡

默認情況下預防的情況下,淘汰賽將允許click事件繼續泡到任何更高級別的事件處理程序。例如,如果您的元素和該元素的父級都處理click事件,則會觸發這兩個元素的點擊處理程序。如果有必要,可以防止事件通過包括額外的結合名爲clickBubble並通過虛假它冒泡,如本例:

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

通常情況下,在這種情況下myButtonHandler將被稱爲首先,然後點擊事件會冒泡到myDivHandler。但是,我們添加的值爲false的clickBubble綁定會阻止事件通過myButtonHandler。

瞭解點擊綁定的細節在這裏http://knockoutjs.com/documentation/click-binding.html

+0

謝謝,問題不在於存在太多的事件,而是沒有。 通過在Chrome中點擊鼠標點擊一個斷點,我可以看到事件在jQuery中處理,這讓我感到困惑,因爲jQuery尚未設置用於任何事件。 我已經比較了它做了另一個我寫的SPA和jQuery的單擊事件和調用淘汰賽。 我重構了我的代碼從一個雙視圖模型系統與工作點擊事件,這個單一的ViewModel版本(基於郵件教程),沒有。 我在Chrome開發人員工具中使用了:元素 - >事件監聽器爲我提供了所需的見解。 – zeristor

0

如果我換成

click: $root.goToItem 

click: goToItem 

再次工作。

似乎jQuery的事件觸發是一個紅鯡魚,我將它比作一個工作系統,它在jQuery的起步。我不得不刷新我的DOM調試,這不是壞事。

$ root superflous,它讓別人指出了我。我確信在foreach循環中,只能通過$ root訪問$ root函數。