2009-08-31 6 views
4

フォームとJavascriptによる確認の送信に問題があります。基本的に、「送信」ボタンが押されると、次のJavascriptが呼び出されます。私は、キャンセルの代わりに、[OK]を打ったとき、私はアドレスバーを見て、それが#editform2に更新されないので、HTMLフォームとJavascriptの確認

function confirmation() { 
    var answer = confirm("Are you sure you wish to edit?") 
    if (answer) 
    { 
     window.location = "#editform2"; 
    } 
} 

はしかし、Javascriptが正しく実行されます。しかし、この書式は依然として提出されています。それはページをリフレッシュするようです。ここでは、フォームからの関連する部分があります:それは起こってどこだから、フォームが知らない

//Form is encoded in PHP 
<form method=\"post\"> 
//Form is in here 
<input type=\"submit\" value=\"Edit\" onclick=\"confirmation()\"> 

、それだけでページを更新し、ページも同様のプロセッサであることを起こります。キャンセルをクリックしてもJavaScriptは処理されますが、JavaScriptは同じページに保持する必要があります。処理を別のページに移動するだけでなく、私のソリューションは何ですか?

答えて

6

これはうんざりなボタンであり、すべての場合にフォームが送信されるため、このように機能します。フォームにIDを割り当て、入力タイプ変更:

<form method="post" id="formid"> 
<input type="button" value="Edit" onclick="confirmation()"> 

をし、クリックしたときに、この関数を呼び出す:

function confirmation() { 
    var answer = confirm("Are you sure you wish to edit?") 
    if (answer) 
    { 
     document.getElementById("formid").submit(); 
    } 
} 
+0

フォームがすべて返されない場合、メソッドがfalseを返した場合、フォームは送信されません... – Robban

1

試してみてください。

return answer; 
機能の終わりに

とonclickの方法がこれを返すことを確認してください。同様に、

これは、関数が偽を返し、フォームが転記されないようにします。

4

のをonSubmitイベントを使用し、送信ボタンのonclickのイベントを使用しないでください。あなたのフォーム:

document.forms[0].onsubmit = function() { 
    return confirm("Are you sure you wish to edit?"); 
} 

フォームにID属性を追加して識別することができます。

JavaScriptコードにイベントバインディングを保持する。 HTMLのインラインアトリビュートではなく、コードのメンテナンスやデバッグが容易になります。

+0

+1、 'document.forms [0]'は優れた保守性の問題ではありません。フォームに名前やIDを付ける方が良いでしょう。 – nickf

+0

申し訳ありませんが、おかげです、例の目的だけだったので、私はIDを追加することをお勧めします... – CMS

関連する問題