2010-05-19 113 views
15

爲什麼當我使用jQuery綁定事件對象我回來的事件對象與使用addEventListener返回的對象不同?爲什麼事件對象不同來自jquery綁定與addEventListener

由此jQuery綁定產生的事件對象沒有targetTouches數組(除其他外),但來自addEventListener的事件沒有。是我還是不是在這裏?

$(document).ready (function() { 
    $("#test").bind("touchmove", function (event) { 
     console.log(event.targetTouches[0].pageX); 
     // targetTouches is undefined 
    }); 
}); 

$(document).ready (function() { 
    var foo = document.querySelectorAll('#test') 
    foo[0].addEventListener('touchmove', function (event) { 
     console.log(event.targetTouches[0].pageX); 
     // returns the correct values 
    }, false); 
}); 
+0

你能發表涉及創建targetTouches變量的代碼嗎? – ground5hark 2010-05-19 06:11:08

+0

@bobthabuilda:'targetTouches'是'touch'事件的一個屬性,如果我沒有記錯的話,只有在Safari/WebKit(在iPhone應用上很常見)時纔可用。 – CMS 2010-05-19 06:26:46

回答

24

這是因爲jQuery使用它自己的Event model

jQuery只是將的一些屬性從原始事件複製並標準化爲您作爲處理程序的第一個參數獲取的事件對象。

複製的屬性基於DOM Level 3 Events Spec

要獲得原始的事件對象,你可以:

$(document).ready (function() { 
    $("#test").bind("touchmove", function (event) { 
     var e = event.originalEvent; 
     console.log(e.targetTouches[0].pageX); 
    }); 
}); 

originalEvent屬性是可訪問的,它會工作,但沒有記錄,你可以看到它是如何設置的jQuery.Event構造幕後。

+0

「originalEvent」屬性記錄在http://api.jquery.com/category/events/event-object/下的「特殊屬性」下。 – 2011-05-02 08:15:56

+0

@Mathias:謝謝,我稍後會更新這篇文章,該文件沒有記錄[back in 2010](http://replay.web.archive.org/20100827151056/http://api.jquery.com/類別/活動/事件對象/)。 – CMS 2011-05-02 17:59:03

+0

當然,我只是添加鏈接到您的答案,以備將來參考,現在它終於被記錄(不知道確切發生的時間)。感謝您編輯您的文章:) – 2011-05-04 06:47:19