2012-01-15 13 views
0

私はフォームを持っている:私は電子メールで、提出ブトン、そのポストをクリックするとjQueryのアヤックス自体への投稿の代わりに、スクリプト

function emailSubmit(){ 
     $.ajax({ 
         type: "POST", 
         url: "mysitesip/addemail.php", 
         data: { 
          email: $("#email").val() 
         }, 
         success: function (data) { 
          $('#success').html(data); 

         } 
        }); // end Ajax  
    } 

<form name="emailform" id="emailform" onsubmit="emailSubmit()" method="post"><div> 
     <input type="text" id="email" name="email" value=""> 
     <input class="btn" type=submit value="Submit"></div> 
      </form> 

はここemailSubmit()ですaddemail.phpではなく、アドレスをパラメータとして使用して、ページを更新しますか?なぜこうなった?私がmethod = "post"を取り除くと、フォームはGETリクエストを自分自身に出すが、正しい電子メールをパラメータとして使う。 .ajaxメソッドは、そのタイプがPOSTであることを明確に述べているので、これは私にとって非常に混乱しています。フォームの「メソッド」を変更すると、emailSubmit()の投稿が変更されるのはなぜですか?

.ajax呼び出しは、別のページで非常によく似た使い方からそのまま受け継がれ、うまく動作します。

(私は「それがPOSTしている」または私はこれらの事を見て放火犯を使用しています、「GETingされる」と言うとき)

答えて

4

あなたは、標準的なフォームの送信をキャンセルすることは何もやっていません。

結果として、指定したURIにAjaxのものが送信され、action属性を忘れたため、現在のページのURIに正常に送信されます。

  1. 停止固有のイベント属性を使用して(すなわちのonSubmit属性)
  2. 使用JS event bindingではなく
  3. prevent the default submit action
  4. あなたはJSのために失敗したので、もし賢明な場所を指してaction属性を持っていることを確認します何らかの理由で、フォームはまだ動作します。 c.f. Unobtrusive JavaScript

または、迅速かつ汚れたハックとして... onsubmit属性の末尾にreturn false。 「Aボタンをするために使用され提出 -

function emailSubmit(){ 
    $.ajax({ 
        type: "POST", 
        url: "mysitesip/addemail.php", 
        data: { 
         email: $("#email").val() 
        }, 
        success: function (data) { 
         $('#success').html(data); 

        } 
       }); // end Ajax  
    return false; 
} 
+0

私はこれを行いました:$( "#emailform")。送信( \t \t \t function emailSubmit(){...});戻り値falseの関数を終了することを含みます。そしてonsubmit属性を取り除きました。しかし何も変わっていない。どうして? –

+0

(その間、私はこの問題を抱えている他の人たちのために働いたonsubmitを返しただけです) –

1

フォームデータをサーバーに送信する」

私は何をすると、次のである - 私の元の投稿は動作しません指摘されたよう

<form name="emailform" id="emailform" method="post"><div> 
    <input type="text" id="email" name="email" value=""> 
    <input class="btn" type=button onclick="emailSubmit()"></div> 
</form> 

編集、。私が作ったはずのポスト -

<form name="emailform" id="emailform" ><div> 
    <input type="text" id="email" name="email" value=""> 
     </div> 
</form> 
<input class="btn" type=button onclick="emailSubmit()"> 

は、私はちょうど押しが提出し、答えは私の現在のコードベースと一致しているをしない入ることを確認しました。

+1

これはうまくいかないでしょう。イベントハンドラは 'emailSubmit'関数からの戻り値で何もしません。 – Quentin

+0

あなたは正しいです、それをあまりにも早く見ました。必要に応じて編集します。 – glortho

1

http://www.w3schools.com/html/html_forms.asp

onsubmit="return emailSubmit()" 

とを:あなたは、フォームを提出し、ハンドラで値を返さないのでfalseを返す必要が

+0

テキスト入力でEnterキーを押すと、フォームは正常に送信されます。それはあまりにも脆弱な解決策です。 – Quentin

+0

あなたは正しいです。あまりにも速くコピーしました。メソッド属性を使用しない –

+0

メソッド属性を追加しても、フォームを通常どおりに提出するテキスト入力には入力が停止しません。 – Quentin

関連する問題