HTML 表单按钮值未在 Safari 和 Chrome 中发布

Posted

技术标签:

【中文标题】HTML 表单按钮值未在 Safari 和 Chrome 中发布【英文标题】:HTML Form Button value is not posted in Safari and Chrome 【发布时间】:2012-07-08 00:16:09 【问题描述】:

单击按钮时,我正在使用 jQuery 提交表单。然后我想测试按钮的值,但是,这不会在 Safari 和 Chrome 中提交。为什么?有解决办法吗?

在 IE/FF 中测试下面的代码看它是否可以工作,然后在 Safari/Chrome 中测试它是否可以:

ButtonPostTest.php:

<?php
    if(isset($_POST['testBtn'])) 
        echo $_POST['testBtn'];
    
?>
<html>
    <head>
    <title></title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function() 
                $('#btn').click(function() 
                    $('form').submit();  // submit the form
                );
            );
        </script>
    </head>
    <body>
        <form action="" method="post">          
            <button id="btn" class="page-btn" type="submit" name="testBtn" value="Yes Button value is posted!">POST IT!</button>
        </form>
    </body>
</html>

更新:

input 也会发生同样的事情:

<input id="btn" class="page-btn" type="submit" name="testBtn" value="Post this"></input>

此外,这只是使用 jQuery .submit() 提交时的问题 - 没有这个,它可以通过按钮或输入正常提交。

【问题讨论】:

感谢这为我指明了正确的方向。让我发疯,甚至没有怀疑我之前添加的 jquery.submit ......我发现了这个行为的解释以及它发生的原因:***.com/a/1709352/76672 在 Chrome (Linux Mint) 中似乎可以正常工作。它已经使用 Webkit 的一个分支已经有一段时间了,所以它可能已经在 Chrome 中修复了。 【参考方案1】:

给它一个名字。

<button type='submit' id='trash' name='trash' value="trash" class='red'>

【讨论】:

除错,这也有帮助。【参考方案2】:

我认为你发现了一个 webkit 错误。

我在 Chrome 中进行了同样的测试,您的表单:

<form action="" method="post">          
   <button id="btn" class="page-btn" type="submit" name="testBtn" value="Yes Button value is posted!">POST IT!</button>
</form>

这不会发送任何数据。但是,如果我添加另一个元素,特别是输入:

<form action="" method="post">          
   <input type="hidden" name="shim" value="" />
   <button id="testBtn" class="page-btn" type="submit" name="testBtn" value="Yes Button value is posted!">POST IT!</button>
</form>

这会发送两个值。这没有 JavaScript。添加 shim 隐藏表单元素后,它看起来就有意义了。

此解决方案需要更多测试,但它可能会满足您的需求。

【讨论】:

我需要使用 jQuery 提交,以便在提交之前更改表单操作。还是一样的结果(使用 jQuery 提交时)... 我不确定这有什么不同。 shim 的重点是,我认为 Chrome 的行为可能会根据表单中表单元素的数量和类型而有所不同。【参考方案3】:

正如 Robert 上面所说,在使用 &lt;button&gt; 标记时,您需要同时使用 name=""value="",例如

<button name="Search" value="Simple" type="submit">Search</button>

VS

<button name="Search" value="Advanced" type="submit">Search</button>

在此示例中,您的 POST 数据将具有 Key 值对:

搜索简单

搜索高级

然后根据该 POST 值,您可以编写代码以采取适当的措施。 :)

即您不需要使用输入,只需使用带有名称/值的按钮就可以了。

【讨论】:

【参考方案4】:

这可能非常明显,现在我自己修复了它,我意识到这是一个愚蠢的错误。但对我来说,我错误地离开了type="submit"。表单始终有效,但只是从这些按钮中发布了一个值。

没有传递值(错误):

<button name="step" id="btn1" value="my_value">btn_text</button>

价值传递(良好):

<button type="submit" name="step" id="btn1" value="my_value">btn_text</button>

无论如何,我希望这对刚开始的新人有所帮助,或者坚持一些看似如此明显的事情。

干杯!

【讨论】:

【参考方案5】:

所以,我也遇到了非常相似的事情。一切正常,除了 Chrome [版本 78.0.3904.108 (Official Build) (64-bit)]。

当我取出

所以我花了很多时间挖掘并发现您可以在

中的 onsubmit= 处禁用 [Submit] 按钮。事实上,onsubmit= 和 onclick= 几乎是一样的,所以我想我以后只需要改变一些东西,让我总是使用 onsubmit=,然后所有的大浏览器都可以继续为我工作。

【讨论】:

我可以报告同样的问题。我在提交事件处理程序期间禁用了按钮,以防止重复提交。 我还可以报告我在 onsubmit 期间禁用了它,因此提到的修复(而不是 onclick,使用 onsubmit)不适合我。我已经添加了自己的答案。【参考方案6】:

&lt;button&gt;&lt;input&gt; 是两个不同的标签。如果您想提交按钮值,请使用&lt;input&gt; 标签。

【讨论】:

不幸的是,这并不能解决问题,它会产生相同的结果:( 您好,迈克,我遇到了您的问题。我想知道您为什么使用 jquery 提交表单?如果您不使用 jQuery 直接提交表单,您将获得提交按钮的值。但是,如果您借助 javascript,它不会提交按钮值。 我正在使用 jQuery 提交表单,因为我在表单中有多个提交按钮,我想在提交之前更改表单操作 - 取决于单击哪个按钮。 好的...那么我建议您设置一个隐藏字段并根据单击的按钮覆盖其值。然后您可以轻松识别在服务器端按下了哪个按钮。 按钮元素在功能上与 input[type="submit"] 相同,只是它们使用更丰富的标记呈现。【参考方案7】:

同意 Vins,我可能会使用 &lt;input&gt;

您使用&lt;button&gt; 而不是&lt;input&gt; 有什么特别的原因吗?我通常更喜欢&lt;button&gt;(允许我添加图标和图像),但我相信浏览器之间在如何解释值方面存在差异......

根据w3schoolsMozilla Developer Network,部分浏览器会提交value属性,而IE7等其他浏览器会错误提交标签之间的文字。

【讨论】:

如果您确实需要 &lt;button&gt; 来显示,您可以使用 JS 点击处理程序来解决该问题,该处理程序在隐藏字段中设置适当的值... 将按钮更改为输入也不起作用,仍然没有提交。隐藏字段已提交,因此我可能不得不使用此解决方法选项-> 单击按钮,将隐藏字段设置为适当的值,然后提交表单,使用隐藏字段进行处理。我只是想知道是否有更好的解决方案? 我将不再引用 w3schools。我将不再引用 w3schools。我将不再提及 w3schools。【参考方案8】:

尝试像这样通过捕获隐藏的输入来发送按钮作为提交。

PHP:

<?php
    if(isset($_POST['btname']))
        echo $_POST['btname'];
    
 ?>

和html:

<form method="POST" action="" id="formname" name="formname">
<input name="btname" id="btname" type="hidden" />
<button onclick="document.formname.submit()" value="Submit">Send</button>
</form>

【讨论】:

【参考方案9】:

您要发布多少个值?

我不确定您的问题是否已解决。没有提到的一件事是您可能已经超出了您的 php max_input_vars 限制。

当你超过这个限制时,Php 是静默的,所以你必须检查警告日志,或者这样检查:

1。 计算 POST 数组值。 var_dump($_POST); 中的脚本(在安全的生产沙箱环境中)会做得最好,因为您可以查看最终值输出以了解 POST 数组“切断”的位置。

2。 接下来,运行一个脚本以使用函数输出 php 信息:phpinfo()。检查“max_input_vars”的值。

3。 如果 POST 数组计数 == "max_input_vars" 值,那么您已经超出了限制。

在您的情况下,提交输入可能会稍后包含在 POST 中。

要在 php.ini 中编辑值(在本例中为 5000),请添加或编辑以下行:max_input_vars = 5000

【讨论】:

【参考方案10】:

在提交/点击事件期间禁用的按钮不会提交其值

按照 Alan Stewart 的说法,当我编写一个小实用程序来防止双击侦听“提交”并禁用该按钮的表单提交按钮时,我遇到了这个问题。

我更改了我的代码,以便确定表单是否已经提交,如果是,则禁用按钮并阻止通过event.preventDefault() 提交表单。

它不像以前那么好立即禁用提供即时视觉反馈的按钮(因为 Bootstrap 具有禁用按钮的样式)。

【讨论】:

以上是关于HTML 表单按钮值未在 Safari 和 Chrome 中发布的主要内容,如果未能解决你的问题,请参考以下文章

文本字段更改的值未在 OnSubmit 中更新 - React-Hook-Form 和 React Js

来自父级的 TextField 默认值未在子级上呈现

iOS Safari HTML表单下一个/上一个按钮 - 它们如何工作?

C ++ #define值未在cpp文件中读取

IBInspectable 属性值未在 xib 中更新

Python:函数返回的值未在熊猫数据框中更新