Halo Clabers! Mucho tiempo sin escribir por aquí ¿Alguien me echó de menos? (¿alguien se acuerda se mi? aw~). Vuelvo para escribir un tutorial sobre un problema que he tenido que resolver esta mañana por unos formularios de HTML5.
HTML5 trae novedades muy buenas para el uso de formularios que nos simplifican el trabajo, pero que son ignoradas por navegadores como Internet Explorer y versiones antiguas de Firefox.
Para solucionar esto hay varios plugins que a través de jQuery simulan los mismos comportamientos. Como es el caso del plugin jQuery.html5form de Matias Mancini.
El uso de este plugin es extremadamente sencillo. Únicamente vincularemos las librerías de Jquery y Html5Form, e inicializaremos el formulario:
Código :
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> <script src="http://html5form.googlecode.com/svn/trunk/jquery.html5form-1.4-min.js"> </script> <script> $(document).ready(function(){ $('#formulario').html5form(); }); </script>
Con esto ya tendríamos los mismos comportamientos (en principio) de los formularios de HTML5 en navegadores que no soportan estas nuevas características.
EL problema
El problema que me he encontrado utilizando este plugin ha sido con los campos "required" al hacer submit desde un botón que es una imagen:
Código :
//funciona OK <input type="submit" value="Enviar"/> //se ignoran los atributos required de html5 <input type="image" src="img/boton.png" alt="Enviar">
En este caso los atributos required son ignorados y el formulario se envía con los datos vacíos...
El problema viene porque en el script sólo se asignan los controladores que detectan los campos requireds a los elementos :submit, con lo que las imágenes envían el formulario de forma normal.
La solución
Esto lo podemos solucionar fácilmente editando un poco el código del script, en la parte donde asignamos los comportamientos a los elementos :submit, también se los asignaremos a los elementos input:image.
Código :
//cambiamos esto: $.each($(':submit',this),function(){ ... } //por esto: $.each(new Array($(':submit',this),$('input:image',this)),function(){ ... }
Y listo! problema resuelto
Espero a alguien le sea útil.
Saludetes!
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por master_of_puppetz el 01 de Diciembre de 2011
Por Freddie el 01 de Diciembre de 2011
Muchas gracias por el gran aporte Z, que bueno verte de nuevo.
Por Zguillez el 01 de Diciembre de 2011
Freddie :
Bfff no si te dedicas al marketing online y tu target son usuarios "de bajo nivel"...
En nuestra última campaña hemos tenido un 40% de IE8, 35% de IE7, 8% de IE6!!!, y un miserable 0,7% de IE9
En cuanto a Firefox no sobrepasaban el 3%, y ninguna de una versión superior al 3.6.x
Así que hay que ir con mucho ojo con lo que se implemente en HTML5...
Por masterojitos el 01 de Diciembre de 2011
$.each($('input:submit, input:image', this), function(){ .... });
En cuanto a lo de firefox.... creo que Freddy se referia como siempre.... que al igual que no debemos preocuparnos por los usuarios que usen IE < 7 ... de igual modo por los que usen FF < 4.
Gracias por el aporte
Por Zguillez el 01 de Diciembre de 2011
masterojitos-blog :
Ya, pero eso es un error.. a menos de que estés hablando de un blog personal o cualquier tipo de página donde no haya dinero por medio y puedas permitirte el lujo de mandar usuarios al carajo. Pero como en una campaña de marketing donde cobras por resultados, como le digas al cliente que por una decisión técnica un 10% de las visitas no verán correctamente la landing page y por lo tanto se perderá un 10% de posibles ventas, al que mandan al carajo es a ti...
Ya te digo que he tenido campañas con mas usuarios de IE6 y FF3 que con navegadores que visualicen html5 correctamente.
Por Freddie el 02 de Diciembre de 2011
Zguillez :
Freddie :
Bfff no si te dedicas al marketing online y tu target son usuarios "de bajo nivel"...
En nuestra última campaña hemos tenido un 40% de IE8, 35% de IE7, 8% de IE6!!!, y un miserable 0,7% de IE9
En cuanto a Firefox no sobrepasaban el 3%, y ninguna de una versión superior al 3.6.x
Así que hay que ir con mucho ojo con lo que se implemente en HTML5...
¿Puedes tomarle un screenshot a Analytics? Blurrea o corta la parte del número de visitas, sólo muestra el porcentaje de los navegadores por versión. Eso es super interesante. Muestralo si puedes y lo analizamos todos!
Por Zguillez el 02 de Diciembre de 2011
Ciertamente en campañas más normales, FF está más actualizado pero sigue siendo poco representativo..
Por Freddie el 02 de Diciembre de 2011
¿Eso es Google Analytics o qué es?
Por Zguillez el 02 de Diciembre de 2011
A ese 1.8% habría que sumarle todos los 0.x% de las versiones 3.x.x que no salen en la captura por el scroll. Es cierto que no sobrepasan el 3%, pero teniendo en cuenta el porcentaje aun importante de IE6 y que mayoritariamente tenemos a IE7 y iE8 nos obliga a tener bien adaptada cualquier cosa hecha en HTML5 o CSS3
Por master_of_puppetz el 02 de Diciembre de 2011
Por jagalzap el 02 de Diciembre de 2011
agrdezco la colaboracion.
Saludos
Por Matias Mancini el 02 de Diciembre de 2011
Por jagalzap el 02 de Diciembre de 2011
Saludos.
Por Matias Mancini el 04 de Diciembre de 2011
Ahora acepta input type="image" y también input type="button"
Por yamahid el 23 de Mayo de 2013
<?php
$nombre = $_POST['nombre'] . "\n";
$email = $_POST['email'] . "\n";
$empresa = $_POST['empresa'] . "\n";
$telefono = $_POST['telefono'] . "\n";
$mensaje = $_POST['mensaje'] . "\n";
//$thank="gracias.html";
$cabeceras = "From: Contacto SC-WIA";
$asunto = "Mensaje desde la pagina web";
$message = "
Nombre: ".$nombre."
Correo: ".$email."
Empresa: ".$empresa."
Telefono: ".$telefono."
Comentarios: ".$mensaje."";
$mail='[email protected]';
$bueno="Gracias, tu mensaje se ha enviado correctamente. En breve uno de nuestros ejecutivos se pondra en contacto.";
if (mail($mail,"Contacto SC-WIA",$message,$cabeceras,$asunto)){
header ("Location:regreso.html");
}
else{
header ("Location:error.html");
}
?>
el problema es que al darle submint al formulario solo borra los campos y no me lleva al html regreso, como puedo solucionar esto??
gracias por su ayuda. Saludos!!
Por Raul el 19 de Noviembre de 2014
Tengo un input:submit que funciona correctamente en chrome por ejemplo, pero en firefox 33 me peta. Creo que es algún problema con un required, porque me aparece un bocadillo de validación HTML5 de algún campo, pero lo mejor viene ahora. Resulta que aparece el bocadillo bajo la barra de windows 7, desenfocado y no se ni que puñetero campo es ni porqué falla.
Alguna idea? Sabéis donde puedo encontrar la lista de mensajes de validación html5 de firefox? Supongo que podré contar las palabras y ver de que mensaje se trata, y acotar un poco el problema.
Saludos.