我在点击按钮时使用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()
提交时的一个问题 - 如果没有这个,它可以使用按钮或输入提交。
答案 0 :(得分:6)
给它起个名字。
<button type='submit' id='trash' name='trash' value="trash" class='red'>
答案 1 :(得分:2)
正如罗伯特在使用<button>
标记时所述,您需要name=""
和value=""
,例如
<button name="Search" value="Simple" type="submit">Search</button>
VS
<button name="Search" value="Advanced" type="submit">Search</button>
在此示例中,您的POST数据将具有 键 值对:
搜索简单
或
搜索高级
然后根据该POST值,您可以编写代码以采取适当的操作。 :)
<强>即。你不需要使用输入,只需使用名称/值的按钮就可以了。
答案 2 :(得分:1)
我认为你发现了一个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。一旦你添加了垫片隐藏的表单元素,它看起来就有意义了。
此解决方案需要更多测试,但它可能会满足您的需求。
答案 3 :(得分:1)
这可能是非常明显的,现在我自己修理它,我意识到这是一个愚蠢的错误。但对我来说,我错误地离开了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>
无论如何,我希望这可以帮助那些刚刚起步的新人,或者那些看似显而易见的东西。
干杯!
答案 4 :(得分:0)
<button>
和<input>
是两个不同的标记。如果您想提交按钮值,请使用<input>
标记。
答案 5 :(得分:0)
同意Vins,我可能会使用<input>
。
您使用<button>
代替<input>
是否有特殊原因?我通常更喜欢<button>
(允许我添加图标和图片),但我相信浏览器之间在如何解释价值方面存在差异......
根据 w3schools Mozilla Developer Network,某些浏览器会提交value属性,而其他浏览器(例如IE7)会错误地在标记之间提交文本。
答案 6 :(得分:0)
尝试通过捕获隐藏的输入来发送按钮作为提交。
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>
答案 7 :(得分:0)
你发布了多少个值?
我不确定听起来你的问题已经解决了。有一点没有提到的是你可能超出你的php max_input_vars限制。
当你超出这个限制时,Php会保持沉默,所以你必须检查警告日志,或者这样检查:
1。
计算POST数组值。在var_dump($_POST);
中编写脚本(在安全的生产沙箱环境中)将做到最好,因为您可以查看最终值输出以查看POST阵列&#34;切断&#34;。
2。
接下来,运行脚本以使用函数phpinfo()
输出php信息。检查&#34; max_input_vars&#34;。
3。 如果POST数组计数==&#34; max_input_vars&#34;价值,然后你超过了限制。
在您的情况下,可能会在稍后的POST中包含提交输入。
要在php.ini中编辑值(在此示例中为5000),请添加或编辑以下行:max_input_vars = 5000
答案 8 :(得分:0)
所以,我发生了非常相似的事情。一切正常,除了Chrome [版本78.0.3904.108(正式版本)(64位)]。
当我取出自己的id =时,它起作用了!但这不是问题。原来是我在标记中的onclick =处禁用了[Submit]按钮(使用按钮id =)。执行此操作时,Chrome似乎什么也没发布。哪个没有意义?奇怪吗而且我不知道为什么吗?
因此,我花了大量时间在附近闲逛,发现您可以在中的onsubmit =禁用[Submit]按钮。实际上,onsubmit =与onclick =几乎相同,因此在将来,我认为我需要更改一些东西,以便始终使用onsubmit =,然后所有大型浏览器都将继续为我工作。
答案 9 :(得分:0)
根据艾伦·斯图尔特(Alan Stewart)的说法,当我写了一个小实用程序来防止双击“提交”并禁用该按钮的表单提交按钮时,就引入了这个问题。
我更改了代码,以便确定是否已提交表单,如果已提交,请禁用该按钮并阻止通过event.preventDefault()
提交表单。
它不像以前那样好,因为它立即禁用了提供即时视觉反馈的按钮(因为Bootstrap具有禁用按钮的样式)。