2009-11-10 112 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> 
}