2009-12-03 66 views
0

林有點卡住用下面的函數。請注意,我是一個總的小白與JavaScript/AJAX,所以請與我裸露:提交值用JavaScript

<script type="text/javascript"> 
function removeElement($parentDiv, $childDiv){ 


    if (document.getElementById($childDiv)) {  
      var child = document.getElementById($childDiv); 
      var parent = document.getElementById($parentDiv); 
      parent.removeChild($child); 
    } 
} 
</script> 

<a href=\"javascript:;\" onClick=\"removeElement('$parent','$child');\">x</a> 

此函數刪除的子元素,它的內容,它的偉大工程的客戶端!但我想在同一個實例中將值傳遞給服務器,因此元素的內容也可以從mysql數據庫中刪除。我不知道如何做到這一點,所以任何建議將非常感激!

注:$孩子,和父母$作爲PHP文件中生成的字符串,我用它來給每個元素的唯一的ID。

+0

我不是一個很棒的服務器端程序員,但我很快挑選了一些東西。如果有這樣的事情,我是一個相當不錯的JavaScript程序員。您的問題:您是否可以在同一個removeElement函數中通過XMLHttpRequest發送cgi,restlike或動態腳本標記請求回服務器? – jeremyosborne 2009-12-03 07:14:21

+0

@jeremyosborne - > urmmm?我不會有絲毫的線索?當談到JavaScript時,我總是喜歡。 – Lea 2009-12-03 07:19:20

+0

你使用的是一些客戶端框架,jquery,scriptaculos,moo工具。這一切都變得非常容易。 – 2009-12-03 07:21:15

回答

3

爲了讓您的生活更輕鬆,請使用jQuery或類似的框架。這裏是你會怎麼做jQuery中:

$(function() { 
    $('.delete').click(function() { 
     var link = $(this); 
     var id = link.attr('id').replace('element_', ''); 
     $.ajax({ 
      url: 'handler.php', 
      data: { 
       element: id 
      }, 
      type: 'post', 
      success: function() { 
       link.remove(); 
       // Or link.closest('tr').remove() if you want to remove a table row where this link is 
      } 
     }); 
     return false; 
    }); 
}); 

的HTML:

<a href="#" class="delete" id="element_20">Remove</a> 

而且handler.php:

mysql_query("DELETE FROM `table` WHERE id = '".mysql_real_escape_string($_POST['element'])."'"); 

永遠記住逃脫數據庫輸入!

如果你是一個總的小白,你說,你可能不理解這一切,所以我建議你閱讀一些關於jQuery的AJAX功能和有關使用jQuery或類似的JavaScript框架全面發展。

+0

嗨,謝謝!這一切工作正常,除了被刪除的元素,只有鏈接被刪除?我嘗試了link.closest('tr')。remove(),並且只是將tr改爲div ...但它不起作用?有什麼建議麼? – Lea 2009-12-03 08:14:04

+0

取決於您想要刪除的內容。如果刪除鏈接位於要刪除的元素中,則.closest('div');應該管用。如果不是,你必須嘗試別的。查看http://docs.jquery.com/上關於遍歷和選擇器的jQuery文檔。 – 2009-12-03 13:56:06

+0

感謝您的幫助! – Lea 2009-12-04 04:07:37

1

可以說,我想用一個ID

jQuery來刪除一個實體 - $。員額() 這是一個簡單的POST請求到服務器,而不必使用更復雜的$一個簡單的方法。 ajax函數。它允許指定一個單一的回調函數,當請求完成時(並且只有當響應具有成功的響應代碼時)纔會執行該回調函數。 Jquery post docs

在服務器假設你有一個開放的數據庫連接。

的mysql_query( 「DELETE FROM TABLE WHERE ID =」 $ _ POST [ 'ID']);

on mysql_query這裏

發現編輯:

所以ajax開機自檢完成後,下面將只刪除元素。注意第一個arg是鏈接到將採取的操作的腳本,第二是要發送的數據,在這種情況下,ID柱值將是{child.id}和第三是將採取匿名內聯回調函數刪除元素客戶端的操作。

<script type="text/javascript"> 
function removeElement($parentDiv, $childDiv){ 
if (document.getElementById($childDiv)) { 
      var child = document.getElementById($childDiv); 
      var parent = document.getElementById($parentDiv); 
      $.post('{URLTOSCRIPT}', 'ID=$child.id',function() { parent.removeChild($child); }); 

}} 
</script> 
+0

謝謝!那麼我怎樣才能將它整合到現有的代碼中而不會破壞removeElement()的功能?你能舉個例子嗎? – Lea 2009-12-03 07:37:32

+0

再次感謝!我收到來自螢火蟲的錯誤*使用您的片段缺少正式參數。還有URLTOSCRIPT - ?將網址替換爲處理數據的頁面?很抱歉,如果我的noobness令人討厭 – Lea 2009-12-03 08:16:01

+0

是替換urltoscript包含{},並將第二個參數$ child.id替換爲所需的實際值。即ID = 3或ID = SWK01 ... – 2009-12-03 08:34:35

1

當你調用該函數,你會希望把你的PHP變量的標籤,像這樣:

<?php echo $parent; ?>

<?php echo $child; ?>

在函數的定義,你會想擺脫PHP風格的變量,並使用類似:

function removeElement(parentDiv, childDiv) { //CODE }

+0

JS函數位於PHP頁面的函數中。它仍然會按照代碼的建議輸出。 – Lea 2009-12-04 04:07:03