2012-03-19 17 views
0

フォームが送信される直前にajaxリクエストを実行してから、ajaxコールバックからフォーム送信をトリガーします。しかし、私は提出トリガーしようとすると、私は次のエラーを取得:jQueryを使用してAJAXコールバック内からフォーム送信をトリガー

<form id="myform" method="post" action="http://www.google.com" > 
     <input type="text" name="email" id="test" size="20" /> 
     <input id="submit" name="submit" type="submit" value="Submit" /> 
    </form> 

    <script> 

    function do_ajax() { 

     var jqxhr = $.get("#", function(){ 

      // Once the ajax function is complete, I want to submit my form: 
      $('#myform').submit(); 

     }); 
    } 

    $(function() { 

     $('#submit').click(function (e) { 


      // When the user clicks submit, I want to perform an ajax request first: 
      e.preventDefault(); 
      do_ajax(); 

     }); 
    }); 

</script> 

困惑:

Uncaught TypeError: Property 'submit' of object # is not a function

をここで全体のコードです。

+0

コンソールに実際にフォームが含まれているかどうかを確認するために$( "#submit")をログに記録してみましたか? – gpasci

答えて

2

問題は送信ボタンがその名前によって干渉していると思います。私はこれについて何かを読んだことがあります、Googleはリンクします。

ただ、名前とIDを変更し、それが動作します:

<input id="submit2" name="submit2" type="submit" value="Submit" /> 
+0

Simon-ありがとう、何もしなかった。 – Yarin

+0

ええ、あなたはエラーを取り除くことはありませんか?私はこのバージョンであなたと同じエラーが発生しました:http://jsfiddle.net/vW322/1/しかし、送信ボタンの名前を変更したときはhttp://jsfiddle.net/vW322/2/(しかしjsfiddle内にGoogleに投稿することはできないので、別のメッセージが表示されます) –

+0

ああ待っています! .. – Yarin

1

私はあなたが提出するイベントを処理するために、とにかく何をしたいのか、本当に明確持っていない例から:

$("#formId").submit(function() { 
    // Do here whatever you want 
    return false; 
}); 

をし、別のオブジェクト(ない送信ボタン)をクリックして提出を発射します。

$("#another").click(function() { 
    $('#formId').submit(); 
}); 

私はあなたのフォームにIDを与える(ページが複数のフォームを持つことができます)、あなたはget("#")であなたのラインを確認することをお勧めします。それは何をすべきか?

+0

アドリアーノ - これらの提案は問題を解決しません。私のコードは簡略化されています。私の編集を参照してください。目的を明確にするためにコードにコメントしました。フォームが送信される前にAJAX関数を実行します。 – Yarin

0

これはテストされていない、あなたはあなたのAJAXコールバック内の関数を呼び出すように動作するはずですし、最もエレガントな解決策になるが、ここにないかもしれません。..

(function($){ 

    $(function(){ 

     var evtListner = function(){ 
      $("#submit").on('click', function(e){ 
       e.preventDefault(); 
       do_ajax($(this)); 
      }); 
     } 

     var do_ajax = function(scope){ 
      var scope = scope; 
      $.get('#', function(){ 
       submit_it(scope); 
      }); 
     } 

     var submit_it = function(scope){ 
      scope.submit(function(){ 
       // 
      }); 
     } 

     evtListner();//initial call 
    }); 

})(jQuery); 
+0

ありがとうございますが、私の脳は3レベルの入れ子関数しか処理できません。 ;) – Yarin

関連する問題