forma acción con javascript

Tengo un formulario que debe ejecutar una function javascript en submit, la function luego envía datos a mi file 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 function desde un file externo desde la acción del formulario?

action="javascript:simpleCart.checkout()" 

simpleCart es el file .js y checkout () es la function.

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 function 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 function 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);"> 

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 browser vaya a otro lado, sino que llama a tu function.

La única razón para no hacerlo es que no puede entregar su formulario con una simple palabra key 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 automation, sin magia, simplemente llame a myFunction y deje que haga el rest.

(Y sí, otras soluciones también funcionan y no hay problema con ellas. Simplemente prefiero esta).

Siempre incluyo los files js en el encabezado del documento html y ellos en la acción solo llaman a la function javascript. Algo como esto:

 action="javascript:checkout()" 

¿Intentas esto?

No olvide include la reference del script en el encabezado html.

No sé porque eso funciona en Firefox. Saludos.