2012-05-09 17 views
17

Ho una forma che deve eseguire una funzione javascript presentare, la funzione poi distacca i dati al mio php inviare file di posta e la posta viene inviata. Ma funziona solo in fire fox. L'azione modulo non sembrano fare nulla in IE, la mia domanda è: E 'questo il modo corretto di chiamare una funzione da un file esterno dall'azione modulo:azione form con javascript

action="javascript:simpleCart.checkout()" 

simpleCart è il file .js e nella verifica() è la funzione.

Suggerimenti apprezzati, faticando a capire perché avrebbe funzionato in Firefox ma non in IE, Chrome o Safari.

<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post"> 
+0

non puoi chiamare quella funzione da validateFormOnSubmit? – Joe

+0

no perché simpleCart è l'enorme file js per il mio carrello della spesa e validateFormOnSubmit proviene dal mio file .js di validazione e non posso combinare i file. –

+0

vedo cosa stai dicendo. Non è corretto usare l'azione come ho io? –

risposta

34

Un'azione modulo impostata su una funzione JavaScript non è ampiamente supportata, sono sorpreso che funzioni in FireFox.

Il meglio è impostare semplicemente il modulo action nello script PHP; se hai bisogno di fare nulla prima della presentazione si può solo aggiungere alla onsubmit

Modifica si è rivelata non hai bisogno di qualsiasi funzione in più, solo un piccolo cambiamento qui:

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; 
} 

Poi nel modulo:

<form action="#" onsubmit="return validateFormOnSubmit(this);"> 
+0

il problema è che ho bisogno di eseguire la mia convalida, quindi eseguire la funzione di checkout che esegue lo script php –

+0

@whispering_Jack ha aggiornato la mia risposta per riflettere che –

+0

ok provarlo ora. grazie –

1

Includo sempre i file js nella parte iniziale del documento html e loro nell'azione chiamano semplicemente la funzione javascript. Qualcosa del genere:

action="javascript:checkout()" 

Si prova?

Non dimenticare includere il riferimento script nella testa html.

Non so causa che funziona in Firefox. Saluti.

+0

questo è quello che ho fatto –

+0

L'unico modo in cui riesco a far funzionare questi file sta usando l'azione modulo ma non funziona in IE, non riesco a capire perché le soluzioni pubblicate non funzionano ma non chiamano simpleCart.chekout –

+0

Il modo migliore per fare questo a mio avviso è jquery. Controlla questo: http://api.jquery.com/submit/ invia evento. E questo modulo ajax http://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jquery in questo sito contiene una demo. – vfabre

15

Ho appena provato questo in Firefox, Chrome, Safari Edge e, tutti loro sembrano funzionare bene:

<form action="javascript:alert('Hello there, I am being submitted');"> 
    <button type=submit> 
     Let's do it 
    </button> 
</form> 

Quindi a quanto pare questa è un'opzione. Inoltre, lo trovo semanticamente appropriato perché descrive cosa sta succedendo: stai inviando il modulo, e tu non hai bisogno del browser per andare altrove ma chiama la tua funzione.

L'unica ragione per non farlo è che non si può consegnare il modulo sopra con un semplice questo parola chiave come parametro:

<form action="javascript:myFunction(this)"> <!-- doesn't work --> 

Pertanto, la mia raccomandazione è:

<form action="javascript:;" onsubmit="myFunction(this)"> 

... che funzionerà come previsto. Non invia il modulo, non ha bisogno di un "return false" per impedire l'invio, non richiede che tu gestisca il modulo usando domQuery di JQuery, è esattamente come appare. Nessuna automazione, nessuna magia, basta chiamare lo myFunction e lasciare che faccia il resto.

(E sì, anche altre soluzioni funzionano e non ci sono problemi con loro.Mi piace preferire questo.)

+0

Ye olde "print this page" void (0) potrebbe essere il modo più sicuro e multipiattaforma per fare ciò che consentirà "Vai "invece di" Ritorno "visualizzazione del pulsante della tastiera finché c'è un elemento con type =" submit "nel modulo.

Questa è la mia soluzione per le app AngularJS: – TaeKwonJoe

Problemi correlati