在表单上添加提交事件会阻止提交参数包含在HTTP POST中

时间:2011-04-18 11:25:27

标签: javascript jquery html

问题标题是什么。我正在使用SpringMVC,但这真的无关紧要。我只需要能够传递提交按钮name=value以及其余的表单参数以进行验证和控制。以下示例澄清:

我正在使用的HTML:

<form action='somepage.htm' method='post'>
  <input name='somename' value='bob' />
  <input type='submit' name='mybutton' value='click me' />
</form>

我正在使用的JavaScript(使用jQuery):

$('form').submit(function() {
  $('input[type="submit"]', this).attr('disabled','disabled');
  return true;
}

所以HTTP POST请求看起来像没有JavaScript事件绑定:

somepage.htm?somename=bob&mybutton=click%20me

使用绑定事件,它会排除按钮参数:

somepage.htm?somename=bob

我需要能够禁用按钮并仍然将按钮值发送到服务器进行处理。

谢谢!

SOLUTION:

我实际用来解决这个问题的代码是:

$(document).ready(function() {
  $('input[type="submit"]').click(function() {
    var clone = $(this).clone();
    $(clone).attr("type","hidden");
    $(this).attr('disabled','disabled');
    $(clone).appendTo($(this).parents('form')[0]);
    return true;
  });
});

如果有人想知道,在表单中的字段上按Enter确实会触发表单中第一个提交按钮的点击事件!

2 个答案:

答案 0 :(得分:1)

无法提交已停用的输入。

http://www.w3.org/TR/html4/interact/forms.html#h-17.12

所以可能的方法是添加隐藏元素<input type='hidden' value='foo' name='bar'/>以激发另一端的验证方法。

答案 1 :(得分:1)

我认为,如果单击提交按钮,那么它的值也将被提交,就像表格的其余部分一样。