34

好的,这不是一个问题,而不仅仅是为了我的信息(因为我可以想到大约 4 种不同的解决方法可以使它起作用。但是我有一个表单(没什么特别的)但是提交按钮有一个特定的值与之相关联。

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

当表单提交时,我会检查该名称。

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

但是,有一次我尝试通过 Javascript 提交表单,而不是提交按钮。

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

哪个工作正常,除了 1 个问题。当我查看通过 javascript 方法提交的 $_POST 值时,它不包括 submitDocUpdate。我得到了表单的所有其他值,但没有得到提交按钮的值。

就像我说的那样,我可以想出一些解决方法(使用隐藏变量,检查另一个表单变量的 isset 等),但我只是想知道这是否是 submit() 的正确行为,因为它看起来更少-对我来说很直观。提前致谢。

4

7 回答 7

40

是的,这是正确的行为HTMLFormElement.submit()

未发送提交按钮值的原因是因为 HTML 表单被设计为发送被单击(或以其他方式激活)的提交按钮的值。这允许每个表单有多个提交按钮,例如您需要“预览”和“保存”操作的场景。

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

于 2009-11-10T16:40:44.173 回答
11

使用 jQuery 1.0 或更高版本:

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

当我偶然发现这篇文章时,我实际上正在解决同样的问题。不带任何参数的 click() 会在您选择的任何元素上触发单击事件:http: //api.jquery.com/click/

于 2011-07-09T00:14:49.683 回答
7

为什么不使用以下内容呢?

<input type="hidden" name="submitDocUpdate" value="Save" />
于 2009-11-10T16:37:28.407 回答
3

理解行为很好,但这里有一些代码解决了我在 jquery 和 php 中的问题,其他人可以适应。实际上,这是从一个更复杂的系统中剥离出来的,该系统在单击删除按钮时显示引导模式确认。

TL;DR将输入打扮得像一个按钮。单击后将其更改为hidden input.

html

<input
    id="delete" 
    name="delete" 
    type="button" 
    class="btn btn-danger"
    data-confirm="Are you sure you want to delete?"
    value="Delete"></input>

jQuery

$('#delete').click(function(ev) {
        button.attr('type', 'hidden');
        $('#form1').submit();
    return false;
});

php

if(isset($_POST["delete"])){
    $result = $foo->Delete();    
}
于 2018-04-12T15:59:21.173 回答
2

提交按钮值是在用户单击按钮时提交的。调用 form.submit() 不是单击按钮。您可能有多个提交按钮,而 form.submit() 函数无法知道您要发送哪个到服务器。

于 2009-11-10T16:42:35.160 回答
0

尽管接受的答案在技术上是正确的。有一种方法可以携带您想要分配的价值。事实上,当 from 被提交到服务器时,提交按钮的值与您给提交按钮的名称相关联。这就是 Marcin 技巧的工作原理,您可以通过多种方式实现这一目标,具体取决于您使用的方式。前任。在 jQuery 中你可以通过

data: { 
    submitDocUpdate = "MyValue" 
}

在 MVC 中我会使用:

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

这实际上是我遵守使用 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>
}
于 2017-03-21T23:57:06.373 回答
0

这是一个在没有任何外部库的情况下在所有浏览器中都能正常工作的想法。

HTML 代码

<form id="form1" method="post" >
    ...........Form elements...............
    <input type='button' value='Save' onclick="manualSubmission('form1', 'name_of_button', 'value_of_button')" />
</form>

Java 脚本

将此代码放在正文标记关闭之前

<script type="text/javascript">
    function manualSubmission(f1, n1, v1){
    var form_f = document.getElementById(f1);
    var fld_n = document.createElement("input");
    fld_n.setAttribute("type", "hidden");
    fld_n.setAttribute("name", n1);
    fld_n.setAttribute("value", v1);
    form_f.appendChild(fld_n);
    form_f.submit();
}
</script>

PHP 代码

<?php if(isset($_POST['name_of_button'])){

       // Do what you want to do.
}
?>

注意:请不要将按钮命名为“提交”,因为这可能会导致浏览器不兼容。

于 2018-11-06T20:09:02.027 回答