2011-06-29 7 views
0

私はonsumbit属性を持つフォームを持っています。私はonsumbitでjavascript関数を呼び出しています。 フォームが実際にサブミットする前に、隠し変数にいくつかの値を設定する必要があります。そのビットは、SaveQuery()関数で行われます。私はまた、フォームを提出する同じアクションを行うページ上のリンクを持っています。私はonsubmitを追加して、Enterキーを押したときにフォームが送信されるようにしました。jquery submitは再帰によるエラーを引き起こします

jquery v1.4.4ライブラリを使用すると、フォームが再帰的に送信されるように見えます。それを避けるにはどうしたらいいですか? jquery v1.3.2では、問題はないようです。

フォーム:

<form id="savequery" action="savedquery.aspx" method="post" onsubmit="SaveQuery(); return false;"> 
     <input type="hidden" id="orig_q" name="orig_q" value="" /> 
     <input type="hidden" id="isFullText" name="isFullText" value="" /> 
     <input id="queryName" name="queryName" value="New Query" /> 
     </form> 
     <table class="centerButton"> 
      <tbody> 
       <tr> 
        <td> 
         <div id="proceedSave" class="butActive idProceed"> 
          <p> 
          </p> 
          <div> 
           <a href="#" onclick="SaveQuery();">Proceed</a></div> 
         </div> 
         <!-- duplicate text item --> 
        </td> 
       </tr> 
      </tbody> 
     </table> 

SaveQuery機能:

SaveQuery = function() { 
    $("#orig_q").val(document.getElementById("txtQuery").value); 
    $("#isFullText").val(document.getElementById("chkFulltext").checked); 
    $("#savequery").submit(); 
} 

答えて

2

を代わりに提出を停止し、それをトリガーと、あなたはそれはしかし通過させることができます:私はと言うjQueryのドキュメントに何かを見つけることができません

onsubmit="SaveQuery();" 

var SaveQuery = function() { 
    $("#orig_q").val(document.getElementById("txtQuery").value); 
    $("#isFullText").val(document.getElementById("chkFulltext").checked); 
} 
+0

このリンクをクリックするとフォームはどのように提出されますか? – itsbalur

+0

@itsbalur - フォームには送信ボタンが必要です - 私の意見ではない正当な理由はありません。 –

+0

@itsbalur:メソッドを呼び出してフォームを送信する必要があります: 'onclick =" SaveQuery(); $( "#savequery")。submit();ありがとう。 – Guffa

2

あなた両方<form>ためonsubmitハンドラでSaveQuery、および<a>のクリックアクションを呼び出します。その後、関数はsubmit()を呼び出し、関数をトリガーします。関数は、submit()を呼び出し、関数などをトリガーします。もちろん、それは再帰的です!クリックイベントでSaveQueryに電話するだけで問題ありません。

+0

'submit()'メソッドは、特にonsubmitイベントをトリガーします。組み込みの 'submit'メソッドはイベントをトリガーしません。 – Guffa

1

私は2つのライブラリの違いについてはお答えできませんが、あなたのコードに対する単純な修正が問題を解決することをお勧めします。

フォームタグにonsubmit="SaveQuery();タブがあり、Proceedをクリックしたときにこの関数を呼び出します。私の目では、これはjQueryの以前のバージョンがそれをマスクしているかどうかに関係なく、あなたが見ている動作を提示するはずです。

単にこのonsubmitを宣言してください。

ランダムボーナスコメント

あなたはあなたのJavaScriptとjQueryのDOMの相互作用の方法を混合しています。なぜだけではなく、jQueryのを使用します。

$("#orig_q").val($("#txtQuery").val()); 
$("#isFullText").val($("#chkFulltext").attr("checked")); 
+0

+1優れたボーナスコンテンツ! :) –

+0

onsumbit宣言がコメントアウトされている場合、ユーザーがEnterキーを押したときにフォームは送信されません。 – itsbalur

+0

@itsbalur - trueのため、フォームの送信アクションを処理する方がクリックアクションを処理するよりも優れています。 –

関連する問題