2009-11-10 113 views
20

好吧,这不是一个问题,而只是我的信息(因为我可以想到大约4种不同的解决方法,这将使它工作。但我有一个表单太特殊了),但提交按钮具有与之相关的特定值。Javascript提交不包括提交按钮值

<input type='submit' name='submitDocUpdate' value='Save'/> 

当表单被提交我检查这个名字。

if(isset($_POST['submitDocUpdate'])){ //do stuff 

然而,当我一个时间m试图通过Javascript提交表单,而不是提交按钮。

document.getElementById("myForm").submit(); 

哪个工作正常,除了1个问题。当我查看通过javascript方法提交的$ _POST值时,它不包含submitDocUpdate。我得到了表单的所有其他值,但没有提交按钮值。我可以想办法解决这个问题(使用隐藏变量,检查另一个表单变量等),但我只是想知道这是否是submit()的正确行为。因为它对我来说似乎不那么直观。提前致谢。

回答

26

是的,这是HTMLFormElement.submit()

您的提交按钮值不发送的原因,正确的行为是因为HTML表单的设计使得它们发送的提交按钮被点击的价值(或以其他方式激活)。这允许为每个表单提供多个提交按钮,例如您希望“预览”和“保存”操作的场景。

由于您是以编程方式提交表单,因此没有对单个提交按钮进行明确的用户操作,因此不会发送任何内容。

+0

啊。这很有道理。我没有考虑使用多个提交按钮以编程方式提交的概念(我不经常使用多个按钮)。谢谢你;) – 2009-11-10 16:46:28

+0

烦人。我使用'$ form.on('submit',function(){});'当表单被提交时(按钮被点击)触发它,但即使这似乎覆盖允许按钮点击。我尝试使用onsubmit,因为onclick保持提交的形式,当我只是想改变页面,以禁用按钮被点击,但似乎...禁用按钮...提交之前,而不是之后...感谢您的解释! – Jake 2014-06-26 20:56:39

7

为什么不使用以下代替?

<input type="hidden" name="submitDocUpdate" value="Save" /> 
+0

@Tim Cooper - 如果表单中有多个按钮会怎么样? – MarcoZen 2017-12-30 12:54:12

1

当用户点击按钮时提交提交按钮的值。调用form.submit()不会单击该按钮。您可能有多个提交按钮,并且form.submit()函数无法知道要将哪一个发送到服务器。

9

使用jQuery的版本1.0或更高:

$('input[type="submit"]').click();

我实际上是通过同一个问题工作时,我偶然发现了这个帖子。不带任何参数的点击()会在你选择的任何元素上触发一个点击事件:http://api.jquery.com/click/

+0

非常有趣的提示。谢谢。 – 2012-04-19 17:13:16

1

虽然acepted答案是技术性的。有一种方法可以提供您想要分配的价值。实际上,当从服务器提交到服务器时,提交按钮的值与您提交提交按钮的名称相关联。这就是马辛技巧的工作方式,你可以通过多种方式来实现,取决于你使用的是什么。防爆。在jQuery中,你可以通过

data: { 
    submitDocUpdate = "MyValue" 
} 
在MVC

我会用:

@using (Html.BeginForm("ExternalLogin", "Account", new { submitDocUpdate = "MyValue" })) 

其实,这是我如何使用thier自己的形象作为登录链接的蒸汽要求使用OAuth遵守:

@using (Html.BeginForm("ExternalLogin", "Account", new { provider = "Steam" }, FormMethod.Post, new { id = "steamLogin" })) 
{ 
    <a id="loginLink" class="steam-login-button" href="javascript:document.getElementById('steamLogin').submit()"><img alt="Sign in through Steam" src="https://steamcommunity-a.akamaihd.net/public/images/signinthroughsteam/sits_01.png"/></a> 
}