2012-02-12 6 views
6

私はそうのような形+レイアウトを持っている:フォームの送信イベントが発生しないのはなぜですか(jQuery)?

<form ...> 
    <div id="editor"> 
     [form html] 
     <input type="submit" value="Submit form" /> 
    </div> 
</form> 

そして、次のjavascript:

$(function() { 
    var form = $('#editor').parents('form'); 
    alert(form.length); // this alerts "1" 
    $(document).on('submit', 'form', function() { 
     alert('document form submit fired'); // this works as expected (alerts) 
    }); 
    form.on('submit', function() { 
     alert('selected form submit fired'); // this is never alerted 
    }); 
}); 

このフォームは、AJAXを介してロードされていません。ページが読み込まれると、最初のダイアログに "1"が表示されます。ただし、フォームを送信するときは、1つのアラートだけが起動されます。アラートは、ドキュメント内のすべてのフォームに対して送信されます。

なぜこれが起こりますか?

+0

jsFiddleで動作するhttp://jsfiddle.net/sERhZ/多分あなたのHTMLや設定で何か問題がありますか? –

+0

実際、ハンドラが与えられた場合、フォームに直接適用されたハンドラが最初に起動する必要があります。これは完全なコードですか?ブラウザのコンソールにエラーがありますか? – tvanfosson

+0

私は、最初のハンドラで2番目に発生することを防ぐ 'false false'を返すと確信しています。私は正しい? – gdoron

答えて

7

It does work。 2番目のアラートが発射されないようにする何かが起こっています。

+0

あなたは正しいです。他のコードが干渉していました。私はそれが何ができるのだろうと思っていた。 $ .validator.settings.highlightと$ .validator.settings.unhighlightをオーバーライドすると、バグがありました。 – danludwig

0

フォームセレクタが間違っています。

試してみて、何がjavascriptの

を通じてAJAXを介して、または動的にロードされていない場合、これは実際に

を動作するはずですあなただけ

$("form").submit(function() { 
を行うことができますかなり確信してこの

$("form").on('submit', function() { 

を行います

EDIT

スクラッチmy上記。フォームの価値を設定しているのを見ていませんでした。 http://jsfiddle.net/s3fvM/1/をチェックしてください。私にうまく働いているようだ。どちらも発砲と警告しています。

+1

'form'は、jQueryでラップされたフォーム要素を保持する変数です。 – tvanfosson

+0

さて、私は今それを参照してください。私はちょうどjsfiddleでこれを行い、両方とも解雇されています。 [http://jsfiddle.net/s3fvM/](http://jsfiddle.net/s3fvM/1/) – Henesnarfel

+0

"あなたの上記を傷つけました"あなたはその編集に同意しますか? – gdoron

関連する問題