2011-07-07 3 views
1

私が実行した面白い問題です。私は、jQueryのUIダイアログ内でデータを参照するためにjQuery AJAX呼び出しを使用するStruts 2 Webアプリケーションを持っています。同じページには、異なるデータを検索する2つの異なるダイアログがあります。各ダイアログにはページングがあるため、次のリンクが表示されます。同じコールバックを呼び出すダイアログまたは複数のダイアログしかない場合は、すべて正常に動作します。複数のダイアログが表示されるとすぐに、それぞれがアクションクラスへのコールバックを呼び出すと、それが破棄されます(つまり、getCustSearchHtml()メソッドは両方のAJAX呼び出しで呼び出されます)。タスクルックアップ中に[次へ]リンクをクリックすると、適切なアクションメソッドが呼び出されますが、成功コールバックはtaskData.taskSearchHtmlの代わりにreturnData.custSearchHtmlを呼び出します。ここに基本コードがあります:jQuery AJAXの両方のアクションを実行するPOSTは、自分自身の代わりに同じコールバックメソッドを実行します

$('#customer-lookup').delegate('#CLnextLink', 'click', function(e) { 
    e.preventDefault(); 
    var workOrderId = $("#workOrderId").val(); 
    var nextPage = $("#nextPage").val(); 
    $.ajax({ 
     type: "POST", 
     url: "CustomerLookup", 
     data: { id: workOrderId, page: nextPage }, 
     dataType: "json", 
     success: function(returnData) { 
      $("#customer-lookup").html(returnData.custSearchHtml); 
     } 
    }); 
}); 

$('#task-lookup').delegate('#TLnextLink', 'click', function(e) { 
    var workOrderId = $("#workOrderId").val(); 
    var nextPage = $("#nextPage").val(); 
    $.ajax({ 
     type: "POST", 
     url: "TaskLookup", 
     data: { id: workOrderId, page: nextPage }, 
     dataType: "json", 
     success: function(taskData) { 
      $("#task-lookup").html(taskData.taskSearchHtml); 
     } 
    }); 
    return false; 
}); 

...... 

<div id="customer-lookup" class="ui-dialog" title="Customer Lookup"> 
    ..... 
     <a id="CLnextLink" href="#">Next Page</a> 
    ..... 
</div> 
<div id="task-lookup" class="ui-dialog" title="Task Lookup"> 
    ..... 
     <a id="TLnextLink" href="#">Next Page</a> 
    ..... 
</div> 

私が間違っていると思われる人は誰ですか?ありがとう!

+0

ある「getCustSearchHtmlは()」が2回呼び出されますが、提供されているコードのそれへの参照はありません。これはクライアント側の問題です。質問からstruts2への参照をすべて削除し、jquery忍者の私は自信を持って答えを見つけるでしょう。 – Quaternion

+0

customer-lookupのajax呼び出しを見ると、成功コールバックはreturnData.custSearchHtmlからhtmlを設定します。それが参考です。それはタスクルックアップのためにも呼び出されます。 –

答えて

1

HTMLに同じIDを持つ複数の要素があります。それは無効で、あらゆる種類の方法でjQueryを混乱させるでしょう。

EDIT:

それでもクラスセレクタ.TLnextLinkを使用しているが、TLnextLinkは、あなたが言うID

+0

ご返信ありがとうございます。リンクが一意のIDを持つようにコードを変更しましたが、同じ問題があります。私は上記のコードの変更を示しました。 –

+0

あなたはまだクラスセレクタ.TLnextLinkを使用していますが、TLnextLinkはID – david

+0

です。クラスとIDは同じ名前ではないと言っていますか?そうでない場合、私はあなたに従っていない。 –