使用jQuery提交表单时传递额外的变量

时间:2011-02-23 21:12:42

标签: jquery forms post

我有一个表单,其中“提交”按钮不在<form>标记内。提交按钮有一个click处理程序,可以通过jQuery的submit()事件提交表单。这非常有效。

但是,我也需要提交按钮的值进行POST。由于<form>标记中不存在该按钮,因此它不包含在POST数组中。因此,我需要设计一种在提交表单时传递额外变量的方法。

关于不可能实现这一目标的一些规定包括:

  • 无法在<form>标记内移动“提交”按钮。
  • 它无法使用jQuery ajaxpostget方法。
  • 它不能隐藏input字段或提交CSS隐藏的按钮。
  • 表单的行为必须与表单中的正常“提交”按钮完全相同。

我设想了类似的东西,但显然这不起作用。

$('#admin_form').submit({'variable_name', 'true'});

有人对如何实现这个目标有任何想法吗?

5 个答案:

答案 0 :(得分:35)

您可以做的一件事是使用onsubmit属性让javascript将一个帖子字段注入表单,并在提交时使用提交按钮的值。您必须使用隐藏的输入字段执行此操作,但您只需在用户单击提交按钮后立即添加输入字段 - 因此输入字段从一开始就不存在(希望这满足您的要求) )。如下所示:

 function submitHandler()
 {
     submitVal = $('#submitButton').val();
     $('#myForm').append("<input type='hidden' name='submitValue' value='"+
                         submitVal+"' />");
     return true;
 }

单击按钮时,这会在额外值中保留。

答案 1 :(得分:3)

这似乎是一个老问题,但由于我遇到了类似的问题并找到了一个很好的解决方案(对我来说),我以为我会发布它:

 $('#admin_form').trigger('submit', [ { 'variable_name': true } ]);

$('#admin_form').trigger('submit', [ 'variable_name', 'true' ]);

取决于您是要传递名为variable_name的变量值为true还是要传递2个单独的变量。

为了清楚起见,这当然不会自动提交variable_name和其他表单字段,但如果你有一个提交处理程序,就像我在jQuery中那样,变量将作为参数传递,活动结束后。

答案 2 :(得分:1)

Jesse的回答是通过POST实现这一目标的唯一方法。您还可以将变量附加到表单的操作值,但这将通过GET而不是POST传递该参数。在允许默认浏览器“提交”操作之前没有附加到表单的隐藏输入,在提交之前无法访问HTTP请求的原始发布数据 - 它是鸡蛋困境之前的鸡 - 你是什么打算做的是更改发送到下一页的HTTP POST数据/标题,但是在浏览器将数据发布到下一页之前,数据存在的唯一方法是将输入标记嵌入到表单元素中。 / p>

您可以使用的替代解决方案是使用$ .post()函数在onsubmit处理程序中通过post发送您想要的任何数据,并在成功处理程序中重定向到您想要的页面。我知道这不符合上述规则,但也是解决问题的另一种可能方案。

如果您想要真正疯狂并遵守所有规则,您还可以:

  1. “克隆”表单的隐藏版本 到DOM
  2. 注入提交 按钮进入表格
  3. 触发a 单击注入提交的事件 克隆形式的按钮。

答案 3 :(得分:0)

如果你想直接从没有编写提交处理程序而更改的元素中执行此操作,则可以使用:

<script>
$(function() {
  $( ".datePicker" ).datepicker({ 
      dateFormat: 'dd-M-yy',
      onSelect: function (date) {   
        $('#dateChanger').append("<input type='hidden' name='changed_" + $(this).attr("name") + "' value='" + $(this).attr("value") + "' />");    
        $("#dateChanger").submit();
  }
  });
});
</script>

答案 4 :(得分:0)

on jquery 1.11.1

我是这样管理的:

        short iValue = -1400;
        string sResult = iValue.ToString("X2");
        Console.WriteLine("Value={0} Result={1}", iValue, sResult);

同时检查:https://api.jquery.com/event.data/