2010-11-08 79 views
4

我有了這個jQuery代碼,這讓我點擊一個鏈接來獲取其父親,並且在另一個地方改變一些值:

$("a.menu_filter_select").click(function(){ 
    var parent_filter = $(this).parent("tr"); 
    // Update value 
    parent_filter.find(".filter_value").html($(this).html()); 
}); 

的問題是,它會在$空值(這),這是一個意想不到的行爲,我不明白爲什麼它不工作,任何想法?

這裏是控制檯的調試與方法中的斷點:

$(this) 
> null 
this 
> <a class=​"menu_filter_select" href=​"http:​/​/​localhost:​3000/​#" rel=​"1">​test</a>​ 
+1

可以請您發佈本節的html代碼?快速修復將使用.parents(「tr:eq(0)」) – meo 2010-11-08 09:38:52

+3

.parents()方法不能被調用,因爲$(this)爲空 – Alex 2010-11-08 09:40:45

+0

是的,我認爲有一個html錯誤 – 2010-11-08 09:41:12

回答

4

我認爲這是因爲你的函數收到一個事件作爲參數,你需要event.target。

我還建議使用closest代替parent,因爲如果有人把<b><i><span>在錨你的代碼會甚至工作。我也使用find而不是child

編輯:實際上,FireFox中的this引用了錨對象,但我無法確定它是否在其他瀏覽器中以相同的方式實現。 event.target可以參考子對象如果說該文件是這樣的:

<a><b>some text</b> other text</a> 

那麼這個事件處理程序可以輸出不同的元素:

$(a).click(function(event) { console.log(this, event.target); }); 

嘗試在螢火運行此代碼, 看看它怎麼運作。

+0

謝謝很多,這是一個工作! – Alex 2010-11-08 09:45:39

0

偶爾$和jQuery可以失敗之間的結合,嘗試用jQuery代替$。

也嘗試使用$ .log而不是斷點來確保這個範圍不會改變。

2

我能想到會發生這種情況的唯一原因是標識符$已被重新定義。

您可以檢查函數$ == jQuery。如果不是,那麼您可能還包含另一個使用$標識符的腳本。

如果還有另一個庫也使用該標識符,並且它將$標識符的值返回到其原始值,並且您使用jQuery標識符,則可以使用jQuery的兼容性模式。

+0

謝謝,我將在下次遇到像這樣的問題時檢查$ == jQuery。 – Alex 2010-11-08 09:52:51

0

就我個人而言,我總是在使用jquery的時候使用jquery,但是我看到這種情況發生在我使用jquery而不是$的插件中。出於某種原因,它不喜歡使用兩者,但只是在插件代碼中將jquery更改爲$,爲我整理了它。

相關問題