Javascript 提交不包括提交按钮值

IT技术 javascript form-submit
2021-02-26 04:09:49

好的,这不是一个问题,而不仅仅是为了我的信息(因为我可以想到大约 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() 的正确行为,因为它似乎更少- 对我来说很直观。提前致谢。

6个回答

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

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

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

啊。这很有意义。我没有考虑过使用多个提交按钮以编程方式提交的概念(我不经常使用多个)。谢谢 ;)
2021-04-30 04:09:49
恼人的。我正在使用$form.on('submit', function(){});which 在提交表单时触发(单击按钮),但即使这样似乎也覆盖了允许单击按钮。我尝试使用 onsubmit 因为当我只想对页面进行更改以禁用按钮被单击时 onclick 会阻止提交表单,但这似乎...禁用按钮...在提交之前而不是之后……谢谢你的解释!
2021-05-16 04:09:49

使用 jQuery 1.0 或更高版本:

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

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

只是为了增加我的两分钱,我有点被迫这样做,但发现如果您触发的 <input> 按钮当前不可见,则该值仍然不会通过。
2021-04-27 04:09:49
非常有趣的提示。谢谢。
2021-05-19 04:09:49

为什么不改用以下内容?

<input type="hidden" name="submitDocUpdate" value="Save" />
@Tim Cooper - 如果表单中有多个按钮怎么办?
2021-05-20 04:09:49

了解行为很好,但这里有一些代码的答案,这些代码解决了我在 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>

查询

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

php

if(isset($_POST["delete"])){
    $result = $foo->Delete();    
}

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