2013-10-11 149 views
0

現在對jQuery有點問題。我有一個表,我的目標是有一個刪除按鈕,點擊後,它從一個mySQL後端刪除。我在功能方面沒有問題,我的問題是我無法讓jQuery返回false,它會一直重定向到我在form標籤中指向的php腳本。如果您能看到代碼問題,請告訴我。jQuery表單提交不會返回false

我有一個表結構設置,這只是爲了顯示從mysql查詢返回的所有行。也許我沒有正確設置表格。

<?php 
if (sizeof($rows5) > 0) { 
    foreach($rows5 as $row5): 
    echo" 
<tr class='tableRowClass2'> 
<td>{$row5['PackingSlipStarmontID']}</td> 
<td>{$row5['fullStarmont']}</td> 
<form action='delete/starmont.php' method='post' name='deletestarmontForm' id='deletestarmontForm'> 
<td> 
    <button id='button3'>Remove</button> 
    <input type='hidden' id='PackingSlipStarmontID' name='PackingSlipStarmontID' value='{$row5['PackingSlipStarmontID']}'/> 
</td> 
</form> 
</tr>"; 
    endforeach; 
} 
?> 

這裏是jQuery,它假設提交表單後阻止頁面重定向。

$(document).ready(function() { 
    $("#button3").click(function() { 
     $.post($("#deletestarmontForm").attr("action"), 
      $("#deletestarmontForm :input").serializeArray(), 
      function(info){ 
       $("#result4").html(info); 
      }); 
     }); 
     $("#deletestarmontForm").submit(function() { 
      return false; 
     }); 
     function clearInput() { 
     $("#deletestarmontForm :input").each(function() { 
      $(this).val(''); 
     }); 
    } 
}); 

所以這個代碼在它調用PHP腳本和SQL查詢是精細感。問題是它重定向到那個php頁面,而不是在提交時返回false。

*編輯*** 謝謝大家對你的幫助。在這個和實驗之間,我已經解決了這個問題。似乎問題在於處理重複的ID。我使用的代碼與我發佈的代碼相同,但不是使用ID選擇器,而是通過將其更改爲類選擇器來解決此問題。

+0

'e.preventDefault()'在返回false之前? – Soundz

+1

'Id'應該始終是唯一的。 – Dementic

+0

'事件。preventDefault();'會在點擊函數中執行這個工作 –

回答

4

您不能多次使用相同的ID。所以,請注意我已將ID更改爲Class。

<?php 
if (sizeof($rows5) > 0) { 
    foreach($rows5 as $row5): 
    echo" 
<tr class='tableRowClass2'> 
<td>{$row5['PackingSlipStarmontID']}</td> 
<td>{$row5['fullStarmont']}</td> 
<td> 
    <button class='button3'>Remove</button> 
    <input type='hidden' id='PackingSlipStarmontID' name='PackingSlipStarmontID' value='{$row5['PackingSlipStarmontID']}'/> 
</td> 
</tr>"; 
    endforeach; 
} 
?> 

然後,你需要改變你的jQuery代碼。您需要防止按鈕的默認行爲。

$(document).ready(function() { 
    $(".button3").click(function(event) { 
    event.preventDefault(); 
    var value = $(this).siblings('input[type=hidden]').val(); 
    $.post("/your/path", 
      { value : value }, 
      function(info){ $("#result4").html(info); 
     }); 
    }); 
}); 

形式將由$。員額提交,但event.prevenDefault()將禁止提交表單。

+0

不幸的是,這不起作用。我相信它與foreach循環中的表單有關。我可能是錯的,但? –

+0

你說得對。我更新了答案。請讓我知道它是如何工作的。 –

+0

這是行不通的,但它似乎並沒有傳遞隱藏文本框的值。有沒有一種方法可以明確地告訴它輸入框的id,即'PackingSlipStarmontID ...我說的是當它重定向時,SQL語句的執行是成功的,現在它失敗了 –

1

默認操作是轉到您要阻止的表單頁面。

$("#button3").click(function(e) { 
    e.preventDefault(); 
    // rest of submit stuffs 
}); 
1

你可以試試這個e.preventDefault()

$("#button3").click(function(e) { 
    e.preventDefault(); // <-- prevents default action 
    // rest of the code 
}); 
0
$("#button3").click(function(e) { 
    e.preventDefault(); 
}); 
+0

'return false'在jQuery事件中已經包含了這一點 – Izkata

0

形式的行動導致它去到PHP頁面。我們jQuery來壓制默認的動作,因爲你有按鈕運行你的功能。

$("#deletestarmontForm").submit(function() { 
    return false; 
    event.preventDefault(); 
}); 

我想會吧。

0

儘管所有其他答案都是使用e.preventDefault的好處,但我不認爲這是造成問題的原因。 return false;應該做你想要的東西。你可以看到你的代碼在這個fiddle中工作。我的猜測是,你的代碼還有其他的東西。可能是一個JS錯誤(檢查你的控制檯),防止處理程序行爲正確,因此回退行爲是原始表單提交。

相關問題