2013-07-23 48 views
1

我有一個願望清單,我建。它的功能正確地添加/顯示/刪除項目,但我想進一步。當我刪除一個項目時,我希望它有一個彈出窗口,提示「項目X已被刪除」。選擇正確的變量php/javascript

它內置於一個HTML table內部,該接口從foreach生成變量。

我的問題:成功刪除任何項目後,JS提示將只抓取第一個列出的項目的值。

I.E.如果我點擊任何項目的刪除,它會每次回顯第一個項目的變量。 但它確實每次都刪除正確的。

HTML

`echo '<tr > 
        <td > 
         '.$shirt_name.' 
        </td> 
        <td> 
         '.$model_number.' 
        </td> 
        <td style="padding-left:9px;"><div style="height:50px;background-size:contain;" class="'.$shirt_image.'"> 
         </div> 
        </td> 

     ';    
     ?> 
       <? echo '<td> 
       <form action="delete_button.php" method="post"> 
       <input type="hidden" id="deleteitem" class="testbtn" name="deleteitem" value="'.$delete_shirt. '"> 
       <input type="submit" id="del_but" value="Remove" class="deleteBtn"> 
       </form></td>     
       '; 

的Javascript爲了簡潔起見,在這裏我只是想用
class="testbtn"

<script> 
$('.deleteBtn').click(function() {  
var deleteitem = $(".testbtn").val(); 
alert (deleteitem); 
}); 
</script>` 

所以呼應輸入的值,這只是提示第一個列出的價值<tr>而不是我點擊的相對位置。我如何讓它抓住相對值?我希望我足夠清楚!

+0

嘗試'$(本).closest( 「TR」)刪除。 ();'在點擊處理程序 – Orangepill

+0

我試過了,它沒有任何區別。它仍然抓住第一個值... –

+0

也許var deleteitem = $(this).prev()。val(); –

回答

3

試試這個

<script> 
$('.deleteBtn').click(function() { 
var deleteitem = $(this).parent().find('.testbtn').val(); 
alert (deleteitem); 
}); 
</script> 
+0

這正是我一直在尋找的。你能簡單地解釋一下它在做什麼嗎? –

+2

$(this)選擇被單擊的deletebtn元素對象,parent()選擇他的td父對象,find找到tesbtn作爲其類的元素對象(在上一次選擇的td上下文中),val()獲取值選定的testbtn –

1

使用$(this) $(this)是當前單擊的按鈕對象。試着做一個console.log($(this))來看看它有什麼。如果你需要選擇其父行ID或其他東西$(this).parent("tr").attr("ID")

希望這會有所幫助! *無雙關語

+1

$(this).parent('tr')'只會匹配點擊處理程序在td上的內容,您可能意指'$(this).parent('td')。parent('tr')' – Orangepill

1

這裏是一個模板,顯示你應該如何做到這一點。

<script> 
$('.deleteBtn').click(function(e) { 
    e.preventDefault(); 
    if (window.confirm("Are you sure you want to delete?")) { 
     // do ajax to delete on the server 
     $(this).closest("tr").remove(); 

    } 
}); 
</script> 

要剖析一個處理器內這條線$(this).closest("tr").remove();

$(this)將返回接收到事件

.closest("tr")會給你選擇匹配的第一個祖先元素tr

.remove()將刪除dom節點。

+0

謝謝,但這不是我一直都沒有找到的。如果我在提示上單擊「取消」,它仍然會從數據庫中刪除該項目。 –

+0

是啊......我明白了......你不是在做ajax,而是爲了這個。由於您正在進行傳統的發佈,所以頁面只是在缺少已刪除項目的情況下重新呈現。 JS與這個無關......所以還有更多的測試。 – Orangepill

+0

無論如何,我將不得不使用AJAX,因爲我希望div重新加載,顯示沒有刷新頁面的新表。但是現在我一次只採取一步。我也可能需要幫助,所以請注意不久的將來!再次感謝;-) –

0

更新

看我的代碼,並期待在其他兩個項目和嘗試,並把它們粘在一起。

你真的需要重構這段代碼,當你使用javascript做點擊事件時,你爲什麼會把按鈕包裝錯誤?如果你做這樣的事情會更好:

<?php 
    echo "<tr> 
     <td> 
      $shirt_name 
     </td> 
     <td> 
      $model_number 
     </td> 
     <td style=\"padding-left:9px;\"> 
      <div style=\"height:50px;background-size:contain;\" class=\"$shirt_image\"></div> 
     </td> 
     <td class=\"testbtn\" id=\"$model_id\"> 
      Delete 
     </td>";    
?> 

<script> 
$('.deleteBtn').click(function() { 
var id = $(this).attr('id'); 

// DO SOME AJAX AND PUT THE ALERT IN THE SUCCESS 

alert ('Deleted' + id); 
}); 
</script> 
2

是否有列表中每個襯衫的「刪除按鈕」表單?如果是這樣,那麼你可以添加警告()調用提交按鈕,如下所示:

<form> 
    <input type="submit" onclick="alert('Click!'); return true;"> 
</form> 
+0

我需要做的不僅僅是提醒靜態文本... –