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">
Author: whispering_Jack, 2012-05-09

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);">
 38
Author: Ja͢ck, 2012-05-10 19:38:00

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.

 22
Author: dkellner, 2018-07-15 12:14:01

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.
 1
Author: vfabre, 2012-08-02 13:35:15