2012-01-27 83 views
2

我有一個div內的元素是「可拖動的」jquery ui。我正在嘗試刪除整個div。我的元素看起來像jQuery不能刪除父項?

<div class="draggable"> 
    <img ...> 
    <div class="delete">CLICK TO DELETE</div> 
</div> 

而且它有一個可拖動的事件。我想要它,所以當你點擊刪除按鈕時,它會刪除整個div。但它似乎並不奏效。我試過$(this).parent/parents.remove,但都沒有工作,他們甚至不返回任何一種對象(console.log($(this).parent());返回[])。

我刪除功能看起來像

// Delete Image functionality 
    $('.delete').click(function() { 

     $this.parent().draggable('disable'); 

     // Post the DELETE request 
     $.get('delete/', { d: '1' , id:photo }, function(data) { 
      if (data == "true") { 
       $(this).parent().remove(); 
      } else { 
       alert("An error has been encountered, please try again later"); 
      } 
     }); 
    }); 

任何想法,這是怎麼回事?

+0

有你沒有定義'$ this'理由嗎?你可以直接在$ .get – 2012-01-27 22:59:05

回答

1

問題是,在$.get的回調中,this被設置爲jqXHR實例。所以你可以做,例如,this.responseText,如果你想。顯然它不再被設置爲元素。

你需要給元素不被覆蓋別名:

$('.delete').click(function() { 
    var clicked = this; 
    $this.parent().draggable('disable'); 

    // Post the DELETE request 
    $.get('delete/', {d:'1',id:photo}, function(data) { 
     if(data == "true") { 
      $(clicked).parent().remove(); 
     }else{ 
      alert("An error has been encountered, please try again later"); 
     } 
    }); 
}); 

有多種其他的方法你可以做到這一點:最有效的將是var parent = $(this).parent().draggable('disable')(假設draggable是可鏈接的,它有可能是)。另一種選擇是由事件的currentTarget財產去:

$('.delete').click(function(event) { 
    // ... 
      $(e.currentTarget).parent().remove(); 

我想我已經給出的版本可能是最清楚的顯示在爲什麼沒有爲你工作,這就是爲什麼我選擇了它。

+0

之內使用它哦,我的天哪,這是我在星期五晚上編碼時得到的結果... – Steven 2012-01-27 22:58:58

+0

@Steven哈哈,你說我現在認爲;)來不及思考,也許是爲了遲到問stackoverflow;)寂靜的日子和我的(dknaack)的回答是最相同的,我認爲這是一個跡象,我們都必須去睡覺。我將不勝感激。和寂寞的接受 – dknaack 2012-01-27 23:07:56

+0

我upvote @lonesomeday現在回答 – dknaack 2012-01-27 23:09:32

0

內部函數中的「this」與外部範圍中的「this」不同。嘗試存儲在另一個變量「本」,並使用外部函數內的變量,即:

// Delete Image functionality 
    $('.delete').click(function() { 

     $this.parent().draggable('disable'); 
     var that = $(this); 

     // Post the DELETE request 
     $.get('delete/', {d:'1',id:photo}, function(data) { 
      if(data == "true") { 
       that.parent().remove(); 
      }else{ 
       alert("An error has been encountered, please try again later"); 
      } 
     }); 
    });