2012-07-08 13 views
13

Estoy utilizando jQuery para enviar un formulario cuando se hace clic en un botón. Luego me gustaría probar el valor del botón, sin embargo, esto no se envía en Safari y Chrome. ¿Por qué? Hay un trabajo alrededor?El valor de HTML Form Button no se publicó en Safari y Chrome

Prueba el siguiente código en el IE/FF para ver que funciona, y luego probarlo en Safari/Chrome para ver que no es así:

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> 

ACTUALIZACIÓN:

lo mismo ocurre con input:

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

Además, esto es solo un problema cuando se envía mediante jQuery .submit() - sin esto, se envía bien con el botón o la entrada.

+0

Gracias esto me señaló en la dirección correcta. Me estaba volviendo loco, ni siquiera sospechaba el jquery.submit que había agregado antes ... Encontré esta explicación del comportamiento y por qué sucede: http://stackoverflow.com/a/1709352/76672 – Jake

+0

Parece que funciona Está bien en Chrome (Linux Mint). Ha estado utilizando un fork de Webkit desde hace bastante tiempo, por lo que tal vez esté solucionado en Chrome. –

Respuesta

0

<button> y <input> son dos etiquetas diferentes. Si desea enviar los valores de sus botones, utilice la etiqueta <input>.

+0

Desafortunadamente, esto no resuelve el problema, produce el mismo resultado :( –

+1

Hola, Mike, tengo tu problema. ¿Quiero saber por qué estás usando jquery para enviar el formulario? Si envías directamente el formulario sin jQuery, " Obtendré el valor del botón de envío. Pero si toma la ayuda de JavaScript, no enviará el valor de los botones. – Vins

+0

Estoy usando jQuery para enviar el formulario porque tengo varios botones de envío en el formulario y quiero modificar la acción del formulario antes de que sea enviado - dependiendo de qué botón se haga clic. –

0

De acuerdo con Vins, probablemente usaría <input>.

¿Hay alguna razón en particular por la que está utilizando <button> en lugar de <input>? Yo prefiero normalmente <button> (me permite agregar iconos e imágenes), pero creo que hay diferencias entre los navegadores con respecto a cómo se interpreta el valor ...

Según w3schoolsMozilla Developer Network, algunos navegadores someterá el atributo de valor, mientras otros navegadores como IE7 enviarán incorrectamente el texto entre las etiquetas.

+0

Si realmente necesita un '

+2

Tampoco funciona el cambio de botón para ingresar, aún no se envía. El campo oculto se envía, por lo que puede que tenga que ir con esta opción de trabajo -> al hacer clic en el botón, establecer el campo oculto al valor apropiado, luego enviar el formulario, usar el campo oculto para el procesamiento. Me pregunto si hay una mejor solución. –

+4

Ya no haré referencia a w3schools. Ya no haré referencia a w3schools. Ya no haré referencia a w3schools. – Tuanderful

1

Creo que has descubierto un error de webkit.

tengo la misma prueba que en Chrome, su formulario:

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

Esto envía ningún dato. Si 'agrego otro elemento, una entrada en particular:

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

Esto envía ambos valores. Esto es sin el JavaScript. Una vez que agregue el elemento de forma oculta shim, parece que tiene sentido.

Esta solución necesita más pruebas, pero puede satisfacer sus necesidades.

+0

Necesito usar jQuery para enviarlo para poder modificar la acción del formulario antes de enviarlo. Todavía el mismo resultado (al enviar usando jQuery) ... –

+0

No estoy seguro de que haga la diferencia. El punto de la corrección es que creo que Chrome puede comportarse de manera diferente en función de la cantidad y el tipo de elementos de formulario en un formulario. – artlung

6

Ponle un nombre.

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

Bug aparte, esto también es útil. – Carlo

2

Como dice Robert anterior cuando se utiliza la etiqueta <button> necesita tanto name=""value="" y, por ejemplo,

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

VS

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

En este ejemplo los datos POST tendrían la clave Valor par de:

Buscar simple

o

Búsqueda avanzada

Y a continuación, sobre la base de que el valor de POST se puede escribir el código para tomar la acción apropiada. :)

es decir, no necesita utilizar la entrada, solo use el botón con nombre/valor y estará bien.

0

Pruebe de esta manera para enviar un botón como enviar captando una entrada oculta.

PHP:

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

y 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

¿Cuántos valores se que publicar?

No estoy seguro de que suene como si su problema estuviera resuelto. Una cosa que no se ha mencionado es que puede haber excedido su límite de php max_input_vars.

PHP está en silencio cuando se excede este límite, por lo que tendrá que comprobar el registro de advertencia, o detectar de esta manera:

1. contar el array valores POST. Las secuencias de comandos en var_dump($_POST); (en un entorno de entorno seguro de producción segura) harán esto mejor, ya que puede ver el resultado del valor final para ver dónde se "corta" la matriz POST.

2. A continuación, ejecute una secuencia de comandos para generar la información de php con la función: phpinfo(). Compruebe el valor de "max_input_vars".

3. Si la matriz POST cuenta == el valor "max_input_vars", entonces ha sobrepasado el límite.

En su caso, puede ser que la entrada de envío se haya incluido más adelante en el POST.

Para editar el valor (a 5000 en este ejemplo) en php.ini, agregar o editar esta línea: max_input_vars = 5000

Cuestiones relacionadas