2013-05-03 62 views
0

我有一個div裏面有一個div,當點擊時會刪除外部div。 jQuery做到這一點是jQuery「this」鏈中變化

275 $(document).on('click','.rightMenuDelete', function(event) { 
276 $(this).parents('.cell'). 
277 fadeOut(300, function() { 
278  $(this).remove();}); 
279 }); 

在276這個關鍵字是我們點擊的內部div。由277包裹的集合有我們想要刪除的外部div。但是我想在刪除外部div之前淡出外部div,所以277會應用fadeOut,然後回調會移除外部div。令我驚訝的是,這278件作品。 278處的這個關鍵字就是我們想要的外部div,不再是我們最初點擊的內部div。任何人都可以拋出一些關於這個關鍵字如何隨着控件向下移動jQuery鏈而改變的信息嗎?

感謝

+1

代碼是? ... – SpYk3HH 2013-05-03 17:17:00

+1

一些相關的代碼會有幫助... – PSL 2013-05-03 17:17:04

+2

你正在使用它在一個不同的功能。不同的功能可以有不同的上下文。有什麼要解釋的? – 2013-05-03 17:20:27

回答

3

執行parents('.cell')時,由this指向的元素在第276行本身發生變化。它不再指向inner div,而是指向類別爲cell的父母名單。

之後,您將執行循環父代集合的fadeOut。在循環內部,this指的是當前父節點被循環。

1

只要保持你的舊this一個參考,因爲在這裏你在打電話.fadeOut.parents('.cell')

+1

除非我誤解。他說代碼按預期工作,並想知道爲什麼。 – 2013-05-03 17:25:14

0

在Javascript this的作用域確定爲基礎,它是在函數創建一個變量,你傳入回調並在其上調用.remove

$(document).on('click','.rightMenuDelete', function(event) { 
    var par = $(this).parents('.cell'); 
    par.fadeout(300, function() {$(par).remove();}); 
    }); 

應該工作。

0

要保留原始this可以將其保存在一個變量:需要

$(document).on('click','.rightMenuDelete', function(event) { 
    var that = this; 
    $(this).parents('.cell'). 
     fadeOut(300, function() { 
      $(that).remove();}); 
}); 

以上的技術,因爲this由其他答覆指出改變淡出內部環境。

0

感謝大家。你們很棒,而且很快。將父項分配給一個變量,然後在fadeOut/remove行中使用該變量顯然是更好的編碼,我會這樣做。不過,我的主要問題是,jQuery中發生了什麼,以便讓jQuery鏈內的this關鍵字的值從一個函數更改爲下一個函數。在純JavaScript中,函數中的this關鍵字是全局對象,比如窗口或文檔,顯然這裏正在發生更多事情。

雖然我現在明白了,但是傳遞給回調函數的是傳遞給它的包裝集的當前成員,並且此時的包裝集是父級,而不是原始的clickee。再次感謝。