tus - forma acción con javascript
consejos para tus amigos (3)
Tengo un formulario que debe ejecutar una función javascript en submit, la función luego envía datos a mi archivo php send mail y se envía el correo. Pero solo funciona en Fire Fox. La acción del formulario no parece estar haciendo nada en IE, mi pregunta es: ¿Es esta la forma correcta de llamar a una función desde un archivo externo desde la acción del formulario?
action="javascript:simpleCart.checkout()"
simpleCart es el archivo .js y checkout () es la función.
Consejos apreciados, luchando por entender por qué funcionaría en Firefox pero no en IE, Chrome o Safari.
<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post">
Una acción de formulario establecida para una función de JavaScript no es ampliamente compatible, me sorprende que funcione en Firefox.
Lo mejor es simplemente establecer action
formulario para su script PHP; si necesita hacer algo antes del envío, puede agregarlo a la onsubmit
Editar resultó que no necesita ninguna función adicional, solo un pequeño cambio aquí:
function validateFormOnSubmit(theForm) {
var reason = "";
reason += validateName(theForm.name);
reason += validatePhone(theForm.phone);
reason += validateEmail(theForm.emaile);
if (reason != "") {
alert("Some fields need correction:/n" + reason);
} else {
simpleCart.checkout();
}
return false;
}
Luego en tu forma:
<form action="#" onsubmit="return validateFormOnSubmit(this);">
Siempre incluyo los archivos js en el encabezado del documento html y ellos en la acción solo llaman a la función javascript. Algo como esto:
action="javascript:checkout()"
¿Intentas esto?
No olvide incluir la referencia del script en el encabezado html.
No sé porque eso funciona en Firefox. Saludos.
Acabo de probar esto en Firefox, Chrome, Edge y Safari, todos parecen funcionar bien:
<form action="javascript:alert(''Hello there, I am being submitted'');">
<button type=submit>
Let''s do it
</button>
</form>
Entonces, aparentemente esta ES una opción. Además, considero que es semánticamente apropiado porque describe lo que está sucediendo: estás enviando el formulario y no necesitas que el navegador vaya a otro lado, sino que llama a tu función.
La única razón para no hacerlo es que no puede entregar su formulario con una simple palabra clave como parámetro:
<form action="javascript:myFunction(this)"> <!-- doesn''t work -->
Por lo tanto, mi recomendación es:
<form action="javascript:;" onsubmit="myFunction(this)">
... que funcionará como se esperaba No envía el formulario, no necesita un "retorno falso" para evitar la presentación, no requiere que maneje el formulario usando el dominio de JQuery, es exactamente lo que parece. Sin automatización, sin magia, simplemente llame a myFunction y deje que haga el resto.
(Y sí, otras soluciones también funcionan y no hay problema con ellas. Simplemente prefiero esta).