2013-02-20 26 views
0

我一直在試圖調試一段時間,我不確定哪裏出錯或者可能會影響它。代碼太大而無法複製,但我會盡我所能解釋我遇到的情況(我也不想使用live,因爲它已被棄用)。jQuery使用代替實況在回調中給出了錯誤的「this」

$(document).on('click', someSelector, function(evt) { 
    evt.preventDefault(); 

    // Do something 

    console.log(this); 
}); 

在console.log中,我得到#document,我不知道爲什麼。我想知道它是否可能與我有的其他代碼衝突,但我無法真正顯示代碼的其餘部分,因爲它太大而無法複製並粘貼到此處,所以我想就此問題而言,可能會造成什麼影響這樣的行爲?就我個人而言,我認爲這有點奇怪,但任何人都可以告訴我可能會發生什麼導致這種行爲,爲什麼jQuery可能會處理它在這裏處理的方式?任何幫助將很樂意欣賞。謝謝!!!

+0

什麼是'someSelector'?你可以在http://jsfiddle.net/上發佈你的其他代碼或完整的例子嗎? – Blender 2013-02-20 04:48:37

+0

嘿攪拌器,這裏是可能感興趣的jsfiddle,雖然我不確定它是否告訴太多這個問題! http://jsfiddle.net/QFzzZ/在此先感謝 – 2013-02-20 04:53:08

回答

2

您在$(document)上指定了您的事件處理程序。這使得this您的document。如果您對哪個元素觸發了該事件感興趣,則您想要查看evt.target

+0

我有那個地方,它工作得很好,並能夠目標「someSelector」,雖然;如果我沒有弄錯,我認爲這是一個推薦的實現方式,請糾正我,如果我錯了,但 – 2013-02-20 04:56:04

+0

這不是一個好辦法嗎? $(document).on(events,selector,data,handler); $(document).on // jQuery 1.7+' – 2013-02-20 05:02:44

+0

這是做這件事的好方法。我只是說你需要的是'evt.target',而不是'this'。 'this'將是處理程序定義的元素,而不是接收事件的元素。這就像告訴你的朋友查理告訴你他的名字,只要他看到有人在街上經過,然後當他開始說「查理,查理,查理......」時,就會感到惱火。「其他一切都應該如此,你只是在使用錯誤的變量。 – Amadan 2013-02-20 05:13:35

相關問題