Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jquery-使用多个按钮以编程方式提交表单_Jquery_Jquery Plugins - Fatal编程技术网

jquery-使用多个按钮以编程方式提交表单

jquery-使用多个按钮以编程方式提交表单,jquery,jquery-plugins,Jquery,Jquery Plugins,我有一张有两个按钮的表格。我使用POST数据中元素的name属性检查在服务器端单击的是哪一个,并相应地执行以下操作: <input id="reply" name="reply" type="submit" value="{%trans "REPLY"%}"> <input id="delete" name="delete" type="submit" value="{%trans "DELETE"%}"> 当然,此代码会导致提交表单时,DELETE按钮的名称不在POS

我有一张有两个按钮的表格。我使用
POST
数据中元素的
name
属性检查在服务器端单击的是哪一个,并相应地执行以下操作:

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

当然,此代码会导致提交表单时,
DELETE
按钮的名称不在
POST
数据中。有没有一种方法可以将该数据添加到
POST
数据中,或者有更好的方法来实现我正在尝试的内容?

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

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

  • 如果按钮名可以是GET而不是POST数据,那么在
    Boxy
    回调中,将其作为查询参数附加到表单的操作中
  • 在表单中有一个隐藏字段,然后将该字段的值设置为
    Boxy
    回调中的按钮名称(或用于将命令传递给服务器的任何名称)。我不能快速写出一个jQuery示例(我自己更像是一个原型),但它应该是相当简单的。如果您正在进行优雅的降级(允许在不使用JavaScript的情况下提交表单),很遗憾,这意味着您需要在服务器端检查隐藏字段(启用了JavaScript)和按钮名称(未启用)
  • 用于获取表单数据,将按钮字段附加到表单数据,然后通过提交结果。这与提交表单并不完全相同,因为它不会用结果替换页面;您希望在
    post
    回调中处理该问题

  • 您可以使用带名称空间的事件,在确认时解除绑定,然后重新触发:

    $(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;  
      });
    
    });
    

    是的,当然我可以将表单发布到服务器端只接收删除请求的另一个视图。但这是最好的方法吗?就我个人而言,我会在不同的控制器中处理回复和删除,因此这对我来说是两全其美的。第一种方法不适用于非javascript提交。第三种方法需要比第二种方法多一点(而且是不必要的?)的努力,第二种方法似乎是最好的。谢谢。在FF3和IE7上试用过,它可以正常工作。好得难以置信,谢谢!美好的当然需要确保在所有目标浏览器上进行测试,但除此之外……更新:适用于最新的FF、IE、Chrome和Safari,以及IE7。为什么
    单击.guard
    而不是
    单击
    $(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;  
      });
    
    });