Acção do formulário com o javascript
eu tenho um formulário que deve executar uma função javascript no submit, a função então envia dados para o meu arquivo php enviar e-mail e o e-mail é enviado. Mas só funciona em fire fox. A ação da forma não parece estar fazendo nada no IE, minha pergunta é: esta é a maneira correta de chamar uma função a partir de um arquivo externo da ação do formulário:
action="javascript:simpleCart.checkout()"
SimpleCart é o .js file and checkout() é a função.
Dicas apreciadas, lutando para entender por que iria funcionar em firefox mas não IE, cromado ou safari.<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post">
3 answers
Uma acção de forma configurada para uma função JavaScript não é amplamente suportada, surpreende-me que funcione no FireFox.
O melhor é apenas definir o formulário action
para o seu script PHP; se você precisar de fazer alguma coisa antes da submissão, você pode apenas adicionar a onsubmit
Edit afinal você não precisava de nenhuma função extra, apenas uma pequena alteração aqui:
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;
}
Depois na sua forma:
<form action="#" onsubmit="return validateFormOnSubmit(this);">
Podes fazer assim:
<form action="javascript:alert('Hello there, I am being submitted');">
<button type=submit>
Let's do it
</button>
</form>
<!-- Tested in Firefox, Chrome, Edge and Safari -->
Então, sim, esta é uma opção, e uma boa opção. Diz:" quando for submetido, por favor, não vá a lado nenhum, basta executar este script " - bem direto ao ponto.
O único inconveniente é:
<form action="javascript:myFunction(this)"> <!-- won't give you the sender -->
... Isto não te vai dar o objecto do remetente.
Mas é fácil de consertar.<form action="javascript:;" onsubmit="myFunction(this)"> <!-- now you have it! -->
... agora ele lhe dá o formulário de remetente como Este . (Você pode escrever um simples " # " como ação, é bastante comum-mas tem um lado efeito de deslizar para o topo ao submeter.)
Mais uma vez, gosto desta abordagem porque é fácil e auto-explicativa. Sem "retorno falso", sem jQuery/domReady, sem armas pesadas. Faz o que parece fazer. Certamente outros métodos funcionam também, mas para mim, este é o caminho dos Samurais.Uma nota sobre a validação
Se você só precisa de validação e ir para outra página se e somente se o formulário foi devidamente preenchido, bem, essa é a coisa mais fácil para do:
<form action="/something.php" onsubmit="return myFunction(this)">
Agora a sua função irá executar antes de a submissão acontecer; e se retornar verdadeiro(-ish), /qualquer coisa.o php {[7] } vai buscar as tuas coisas. Os valores Falsy irão manter o navegador na página e você pode começar a gritar com o Usuário para entrada inválida.
Eu sempre incluo os arquivos js na cabeça do documento html e eles na ação apenas chamar a função javascript. Algo do género:
action="javascript:checkout()"
Experimentaste isto?
Não se esqueça de incluir a referência do script no cabeçalho html.
Não sei porque isso funciona no firefox. Cumprimento.