代码之家  ›  专栏  ›  技术社区  ›  shanyu

jquery-通过多个按钮以编程方式提交表单

  •  2
  • shanyu  · 技术社区  · 16 年前

    我有一张有两个按钮的表格。我使用 name 中元素的属性 POST 数据并做相应的事情:

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

    我正在尝试将确认框(使用boxy插件)添加到 DELETE 按钮使用jquery。代码如下:

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

    当然,此代码会导致表单与 删除 按钮的名称不在 数据。有没有办法将数据添加到 数据或更好的方法来实现我所尝试的?

    3 回复  |  直到 16 年前
        1
  •  4
  •   jaz303    16 年前

    可以使用名称空间事件,确认后取消绑定,然后重新触发:

    $(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;  
      });
    
    });
    
        2
  •  1
  •   T.J. Crowder    16 年前

    有几种方法可以做到这一点。

    1. 如果可以获取按钮名称而不是发布数据,请在 Boxy 回调将其作为查询参数附加到表单的操作中。
    2. 在窗体中有一个隐藏字段,然后将该字段的值设置为 博克斯 回调。我不能快速完成jquery示例(更多的是我自己的原型),但这应该是相当简单的事情。如果您正在进行优雅的降级(允许在不使用javascript的情况下提交表单),那么遗憾的是,这意味着您需要检查隐藏字段(启用了javascript)和服务器端的按钮名(它不是)。
    3. 使用 #serialize 要获取表单数据,请将按钮字段附加到表单数据,然后通过提交结果 jQuery.post . 这与提交表单不完全相同,因为它不会用结果替换页面;您希望在 post 回拨。
        3
  •  0
  •   Zed    16 年前

    最简单的方法是在单独的表单中定义删除按钮。