2009-09-27 68 views
2

我有一個帶有兩個按鈕的表單。我檢查被點擊其中一個在使用元素的name屬性在POST數據在服務器端,並做相應的東西:jquery - 用多個按鈕以編程方式提交表單

<input id="reply" name="reply" type="submit" value="{%trans "REPLY"%}"> 
<input id="delete" name="delete" type="submit" value="{%trans "DELETE"%}"> 

我想添加一個確認框(使用的Boxy插件)到點擊使用JQuery的DELETE按鈕事件。下面是代碼:

$(document).ready(function() { 
    $("#delete").click(function(e){ 
      Boxy.ask('Delete?', {'1':'YES', '2':'NO'}, function(val){ 
       if (val=='1') $("#form").submit(); 
      }); 
     return false; 
    });  
}); 

當然在這個形式的代碼會導致正與DELETE按鈕的名稱在POST數據缺席提交。有沒有辦法將這些數據添加到POST數據或更好的方式來實現我正在嘗試的?

回答

4

你可以使用一個命名空間的情況下,解除綁定的確認,然後再觸發:

$(document).ready(function() { 

    var $delete = $("#delete"); 

    $delete.bind("click.guard", function() { 
    Boxy.ask("Delete?", {"1": "YES", "2": "NO"}, function(val) { 
     if (val == "1") { 
     $delete.unbind("click.guard").click(); 
     } 
    }); 
    return false; 
    }); 

}); 
+0

嘗試在FF3和IE7上運行時沒有問題。太好了,謝謝! – shanyu 2009-09-27 13:34:35

+0

不錯!絕對需要確保在所有目標瀏覽器上進行測試,但除此之外... – 2009-09-27 14:41:36

+0

更新:適用於最新的FF,IE,Chrome和Safari以及IE7。 – shanyu 2009-09-27 15:17:19

0

最簡單的方法是讓您的刪除按鈕以單獨的形式定義。

+0

是的,當然,我可以的形式張貼到上只接收刪除請求,服務器端的另一種看法。但這是最好的方法嗎? – shanyu 2009-09-27 13:09:36

+0

就我個人而言,我會處理在不同控制器中的回覆和刪除,所以對我來說這將是兩全其美的。 – Zed 2009-09-27 13:21:49

1

有幾種方法可以做到這一點。

  1. 如果可以將按鈕名稱設置爲GET而不是POST數據,則在Boxy回調中將它附加到表單的操作中作爲查詢參數。
  2. 在表單中有一個隱藏字段,然後在Boxy回調中將該字段的值設置爲按鈕名稱(或任何想用於將命令傳遞給服務器的名稱)。我無法甩掉一個jQuery示例(更多的是一個Prototype人),但它應該是相當微不足道的。如果你正在進行優雅的降級(允許在沒有JavaScript的情況下提交表單),可悲的是這意味着你需要檢查服務器上的隱藏字段(啓用了JavaScript)以及按鈕名稱(它不是)側。
  3. 使用#serialize來獲取表單數據,追加按鈕字段,並通過jQuery.post提交結果。這與提交表單不完全相同,因爲它不會用結果替換頁面;你想要在post回調中處理。
+0

第一個替代方法不適用於非JavaScript提交。第三個需要比第二個更多(不必要的)努力,這似乎是最好的。謝謝。 – shanyu 2009-09-27 13:25:27