2012-04-30 3 views
2

jQuery Mobileを使用するページ内にフォームがあります。送信イベントが.on()メソッドを使用して処理されるときにフォームの送信を防止する方法

それはちょうど古き良きフォーム、空想何も:私はスクリプトブロック(:$(関数(){})を囲む;明確にするために省略されることに注意):に以下を追加した場合

<form action="index.php" method="post"> 
    <input type="text" name="owner" id="owner" /> 
    <button type="submit">Add</button> 
</form> 

$('form').submit(function(event){ 
    // event.preventDefault(); doesn't work here?!? 
    return false; 
}); 

...どのような形式でも送信されません。ただし、この方法はjQuery Mobileでは使用できません。ページが変更されると、DOMが変更されたときにイベント・バインディングが適用されないためです。

だから私は、代わりにこのアプローチをしようとした場合、:

$(document).on('submit', 'form', function(event){ 
    // event.preventDefault(); doesn't work here as well... 
    alert('submit!'); 
    return false; 
}); 

...フォームは、それがfalseを返すにもかかわらず、提出されます(ボタンがクリックされたときにアラートがあります)。

ここでは何が起こっているのですか?

+0

私は再現することはできません使用してフォーム送信をトリガすることができ、フォームの送信&を防止するであろう。 'return false'はフォームを提出しないようにします[ここ](http://jsfiddle.net/5M2Sg/)。 –

+0

興味がありませんなぜ、単一の要素のイベントに対して 'on'を使用していますか? 'on 'を使うことのメリットは、複数の要素にそれを付けるときや、文書上に存在しない要素を持つセレクタの準備ができていることだと思いましたか? – mattytommo

+0

@mattytomo --nope、on()は、委譲されているかどうかにかかわらず、どのハンドラでも使用できます。 – adeneo

答えて

4

フォームにハンドラを接続する代わりに、[送信]ボタンを使用します。

event.preventDefault() 

は、きっとあなたが検証を行っている(またはあなたがフォームの送信前に行いたいものは何でも)一度、あなたは

$('#target').submit(); 
+0

魅力のように動作します。ありがとう! –

+0

ようこそ。 :) –

関連する問題