2012-05-09 4 views
17

私は送信時にjavascript関数を実行する必要があるフォームを持っているので、関数はデータをphp sendmailファイルに送り、メールが送信されます。しかし、それは火の狐でのみ動作します。フォームアクションがIEで何もしていないようです、私の質問は:これは、フォームのアクションから外部ファイルから関数を呼び出すための正しい方法です:javascriptでフォームアクション

action="javascript:simpleCart.checkout()" 

simpleCartは.jsファイルとチェックアウトです()は関数です。

ヒントはFirefox、IE、Chrome、Safariでは動作しない理由を理解するのに苦労しています。

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

あなたはvalidateFormOnSubmitからその関数を呼び出すことはできませんか? – Joe

+0

いいえsimpleCartはショッピングカート用の巨大なjsファイルであり、validateFormOnSubmitは検証用の.jsファイルからのものであり、ファイルを結合することはできません。 –

+0

私はあなたの言うことを参照してください。私のやり方で行動を使用するのは正しくないのですか? –

答えて

34

JavaScript関数に設定されたフォームアクションは広くサポートされていませんが、FireFoxで動作するのは驚きです。

ベストは、フォームactionをPHPスクリプトに設定することです。フォームで次に

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

:あなたが提出する前に、何もする必要がある場合は、あなただけのが判明あなたは余分な機能は、ここだけの小さな変更を必要としなかったonsubmit

編集に追加することができます。

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

問題は、私は私の検証を実行する必要がある、その後、PHPのスクリプトを実行するチェックアウト機能を実行 –

+0

@ whispering_Jackは反映するために私の答えを更新 –

+0

今それを試してみてください。おかげ –

1

私はいつもjsファイルをHTMLドキュメントの先頭に入れて、javascript関数を呼び出すだけです。このようなもの:

action="javascript:checkout()" 

あなたはこれを試しますか?

htmlヘッドにスクリプトリファレンスを含めることを忘れないでください。

私はそのファイヤーフォックスの作品の原因を知りません。よろしくです。 よろしくお願いします。

+0

thats私が何をしたか –

+0

フォームアクションを使用していますが、IEでは動作しません。投稿されたソリューションは動作していませんが、シンプルコールを試すことはできません。 –

+0

私の意見でこれはjqueryです。これを確認してください:http://api.jquery.com/submit/ submit event。そして、このajaxフォームhttp://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jqueryこのWebにはデモがあります。 – vfabre

15

私はそれらのすべてが正常に動作するように見える、Firefoxの、クロム、エッジとSafariでこれを試してみました:

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

ので、どうやらこれはオプションです。また、フォームが送信され、 ブラウザが別の場所に移動する必要はありませんが、代わりに関数を呼び出す必要があるため、意味的に適切です。

それを行うにはない唯一の理由は、あなたがパラメータとして簡単なと、このキーワードを、あなたのフォームを引き渡すことができないということです。そのため、私の推薦がある

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

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

...期待どおりに動作します。それはフォームを提出しません、提出を防ぐために "返品偽"は必要ない、JQueryのdomreadyを使用してフォームを処理する必要はありません。オートメーションなし、ウィザードなし、、myFunctionと呼んで残りのことをさせてください。

(はい、他の解決策も機能し、問題はありません。私はこれを好むだけです)

+0

"このページを印刷する" void(0)はこれを実行する最も安全な、クロスプラットフォームの方法かもしれません。フォーム内にtype = "submit"の要素がある限り、 "Return"キーボードボタンの代わりに "Enter"を押します。

これはAngularJSアプリのための私のソリューションです: – TaeKwonJoe

関連する問題