2013-03-08 91 views
2

我使用jQuery来在某些情况下自动提交表单。这里是我的代码:JavaScript表单提交不会发送输入类型的值=提交

$("form [data-autosubmit]").closest("form").submit(); 

它的工作原理,但它不会发送名称和input type=submit按钮的价值。

input: text they entered 
submit: Submit 

然而,当形式是由JavaScript的提交,仅此POSTDATA发送:当用户提交

<form method="POST"> 
<input type="text" name="input" value="text they entered"> 
<input type="submit" name="submit" value="Submit"> 
</form> 

就送以下POSTDATA:

为了详细说明,下面的代码:

input: text they entered 

我的PHP脚本依赖于POS中“提交”值的存在TDATA。

我想我可以这样做:

$("form [data-autosubmit]").closest("form").find("input[type=submit]").click(); 

但似乎违反逻辑,当有submit事件用于此目的的形式。

+0

听起来很奇怪......你说得对,它应该显示出来。我想知道这是否是浏览器问题。作为一个快速解决方案,我只需在表单中添加一个,然后查找。 – rnirnber 2013-03-08 19:16:06

+0

@rnirnber这就是我以前做的,但它太凌乱了... – stackunderflow 2013-03-08 19:16:50

回答

3

HTML form s被构建为支持多个submit输入(例如,相同的表单可以具有“插入”和“编辑”按钮)。因此表单依赖于点击来实际注册_POST提交中的所选字段。基本上,HTML允许,看起来像这样一种形式:

<form [...]> 
    <input type="submit" name="Insert" value="Insert"> 
    <input type="submit" name="Update" value="Update"> 
</form> 

像这样在服务器端进行处理:

if(!empty($_REQUEST['Update'])){ 
    //Run update logic here.. 
} 
elseif(!empty($_REQUEST['Insert'])){ 
    //Run insert logic here... 
} 

如果JavaScript的submit()功能POST阵列,将在注册两个按钮使用此有效标记/逻辑打破应用程序,因此它们默认省略了submit输入。

因此,您的Javascript解决方法(触发点击提交按钮而不仅仅是表单)是正确的方法。

+0

好吧我想我必须使用'click()'方法。谢谢你的解释。 – stackunderflow 2013-03-08 19:23:09