2012-07-08 57 views
13

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

测试在IE/FF下面的代码,看看它的工作原理,并对其进行测试Safari /铬中看到它没有:

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> 

UPDATE:

同样的事情发生与input

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

此外,这只是一个问题时,提交使用jQuery .submit() - 没有这个,它提交罚款与按钮或输入。

+0

感谢这个我指出了正确的方向。正在让我发疯,甚至没有怀疑我之前添加的jquery.submit ...我发现了这种行为的解释以及它为什么会发生:http://stackoverflow.com/a/1709352/76672 – Jake 2014-06-26 20:53:20

+0

似乎工作在Chrome(Linux Mint)中确定。它已经使用Webkit的一段时间了,现在可能已经在Chrome中修复了。 – 2015-01-20 02:09:03

回答

0

<button><input>是两个不同的标签。如果你想提交你的按钮值,然后使用<input>标签。

+0

不幸的是,这并没有解决问题,它产生了相同的结果:( – 2012-07-08 11:55:09

+1

你好迈克我有你的问题。我想知道你为什么使用jquery提交表单?如果你直接提交没有jQuery的表单,如果你使用javascript的话,它不会提交按钮的值 – Vins 2012-07-08 13:35:05

+0

我使用jQuery来提交表单,因为我在表单中有多个提交按钮,我想在表单操作之前改变它提交 - 取决于点击哪个按钮 – 2012-07-09 07:56:35

0

同意Vins,我可能会使用<input>

是否有一个特别的原因,您为什么使用<button>而不是<input>?我通常喜欢<button>(允许我补充图标和图像),但我相信有关于如何值被解释浏览器之间的差异...

根据w3schoolsMozilla Developer Network,一些浏览器将提交属性的值,而其他浏览器(如IE7)将错误地提交标签之间的文本。

+0

如果您确实需要'

+2

更改按钮输入也不起作用,它仍然没有提交。隐藏字段已提交,因此我可能必须使用此工作选项 - >单击按钮,将隐藏字段设置为适当的值,然后提交表单,使用隐藏字段进行处理。我只是想知道是否有更好的解决方案? – 2012-07-08 11:54:18

+4

我将不再引用w3schools。我将不再参考w3schools。我将不再参考w3schools。 – Tuanderful 2013-03-18 23:34:20

1

我想你已经发现了一个webkit的bug。

我得到的东西同样的测试在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。一旦添加了填充隐藏表单元素,它看起来像是有意义的。

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

+0

我需要使用jQuery来提交,以便我可以在提交之前更改表单操作。仍然是相同的结果(当提交使用jQuery时)... – 2012-07-08 11:45:44

+0

我不确定这是否有所作为。垫片的重点在于,我认为Chrome可能会根据表单中表单元素的数量和类型而有所不同。 – artlung 2012-07-09 15:14:06

6

给它一个名字。

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

Bug分开,这也是有帮助的。 – Carlo 2015-05-18 11:08:58

2

正如罗伯特说,使用<button>标签上方时,你既需要name=""value="",例如

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

VS

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

在这个例子中你的POST数据将有重点价值对:

搜索简单

搜索高级

,然后根据该岗位价值,你可以写你的代码,以采取适当的行动。 :)

即你不需要使用输入,只需使用名称/值的按钮,你会没事的。

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> 
0

有多少价值,你POST操作?

我不确定这听起来像是你的问题解决了。有一件事没有提到,你可能超过了你的php max_input_vars限制。

1. 计数接线柱阵列值:当你过冲这个限制,所以你必须检查警告日志,或检查这种方式

PHP是沉默。编写var_dump($_POST);脚本(在安全生产沙箱环境中)可以做到最好,因为您可以查看最终值输出以查看POST阵列“切断”的位置。

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

3. 如果POST数组数== ==“max_input_vars”的值,那么你已经超过了限制。

就你而言,可能会出现提交输入将被包含在POST后面的情况。

编辑在php.ini(在这个例子中,以5000)的值,添加或编辑这一行:max_input_vars = 5000