2011-12-17 77 views
1

我希望用戶能夠從列表中刪除項目而無需重新加載頁面,並且正在使用jQuery/AJAX來執行此操作。然而,用我目前的代碼divs不會被刪除。我想我正確的遍歷,所以不知道問題是什麼。如何使用onclick鏈接調用jQuery函數?

在這裏看到的例子:http://jsfiddle.net/BbpWc/1/

HTML:

<img src="delete.png" onclick="delete_item(<? echo $row_item['id'] ?>);"> 

的Javascript:

$(document).ready(function() { 
    delete_item=function(item_id){ 
     var confirmation = confirm('Are you sure you want to remove this item?'); 
     if (confirmation){ 
      $.post(
       "../../items.php?id="+item_id+"&i=delete" 
      ) 
      $(this).parent('.item_container').remove(); 
     }    
     else { 
      return false;  
     } 

    }; 
}) 
+0

你應該使用'$()。點擊()',而不是內聯處理程序。您可以將'ID'存儲在'rel =「」'或'data-'屬性中。 – 2011-12-17 20:40:46

回答

3

看一看這個小提琴:http://jsfiddle.net/BbpWc/9/

我:

  • 改變了錨跨
  • 刪除ID在目前情況下,你不需要有一個ID在它。
  • 刪除onclick屬性,並改爲jQuery的點擊
+0

我需要傳遞ID以便我可以從數據庫中刪除該項目。 – Michael 2011-12-17 21:08:13

+0

啊,對不起,那對我來說有點愚蠢:-)看看這個小提琴:http://jsfiddle.net/BbpWc/9/ – Richard 2011-12-17 21:13:55

+0

完美! :) 謝謝! – Michael 2011-12-17 21:22:01

2

你失蹤您的呼叫括號parent(),並沒有通過在DOM節點(jQuery選擇器開頭的$(this)),因此給定更新的jQuery:

$(document).ready(function() { 
    delete_item = function(item_id,that) { 
     var confirmation = confirm('Are you sure you want to remove this item?'); 
     if (confirmation) { 
      //$.post("../../items.php?id=" + item_id + "&i=delete") 
      $(that).parent().prev().remove(); 
     } 
     else { 
      return false; 
     } 

    }; 
}); 

和HTML:

<div class="item_container"> 
    Item 1 
</div> 
<div> 
    <a href="#" onclick="delete_item(1,this);">Delete 1</a> 
</div> 

<div class="item_container"> 
    Item 2 
</div> 
<div> 
    <a href="#" onclick="delete_item(2,this);">Delete 2</a> 
</div> 

<div class="item_container"> 
    Item 3 
</div> 
<div> 
    <a href="#" onclick="delete_item(3,this);">Delete 3</a> 
</div> 

現在似乎工作:JS Fiddle demo


編輯使用jQuery的click()事件,而不是侵入在線事件處理程序:

$('a').click(
    function(){ 
     var i = $(this).index('a') + 1; 
     delete_item(i,$(this)); 
    }); 

JS Fiddle demo


編輯需要注意的是,有時候,事情可能比預期的更容易一些:

$('a').click(
    function(){ 
     $(this).parent().prev('div.item_container').remove().end().remove(); 
    }); 

JS Fiddle demo

雖然,不可否認,這是不容易重複使用生活在一個庫文件中某處的功能...


響應@羅克森的評論(下同)編輯關於使用的andSelf()方法:

$('a').click(
    function(){ 
     $(this).parent().prev('div.item_container').andSelf().remove(); 
    }); 

JS Fiddle demo

+0

關於在就緒塊和內聯事件處理程序中聲明的變量函數的某些東西感覺很髒。另外,我不確定AJAX請求不應該使用'$ .get()',因爲沒有發送POST變量。而且......不應該在AJAX調用的「成功」上去除元素,而不是之前呢? – 2011-12-17 20:46:04

+0

也許,但沒有OP的進一步意見,他想要什麼,我會盡力回答明確的問題,如果他/她想進一步改善,那麼我會愉快地探索這些選項。此外,現在可笑地累了,所以...是的:我應該想到這一點,真的。我衷心同意內嵌事件處理程序和變量函數的混合......仍然:我們都必須開始學習某處=) – 2011-12-17 20:55:58

+0

'$(this).parent()。prev('div.item_container')。 andSelf()。remove();'(不要忘記'andSelf()'遍歷方法) – 2011-12-17 20:56:25