2011-12-28 9 views
0

私はajaxを使用して部分的なビューを取得するためにポストバックを実行しています。次のコードは、 'DivSearchGrid' 。jQueryがajaxの後に動作しないcall.asp .net mvc3(Razor)

<script type ="text/javascript" > 
     $('#Retrieve').click(function() { 
      $('form').get(0).setAttribute('action', 'Search'); 
      //      $('form').submit(); 
      var formSubmit = $('form'); 
      var datTab; 
      $.ajax({ 
       url: "/AuthorityGrid/Search", 
       type: "POST", 
       data: formSubmit.serialize(), 
       success: function (data) { 
        datTab = data; 
       }, 
       complete: function() { 
        $('#DivSearchGrid').html(datTab); 

       } 

      }) 
      return false; 
     }); 
    </script> 

コントローラ内のアクションメソッドは、新しい値のグリッドを返します。私の問題は、ajx呼び出しが完了した後、私のページ内の他のjqueryイベントが機能しなくなることです。いくつかのイベントのコードは次のとおりです。

<script type="text/javascript"> 

     $(function() { 
      //$('th[scope|="col"]').resizable(); 
      $("#resultGrid > tbody").selectable({ 
       selected: function (event, ui) { 
        if (ui.selected.cells != null) { 
         var strAmount = ui.selected.cells(6).innerText; 
         var Amount = strAmount.replace(/,/gi, ""); 
         var keyValue = "AuthorityLevel1=" + ui.selected.cells(11).innerText + ",AuthorityLevel2=" + ui.selected.cells(12).innerText + ",TcmAccount=" + ui.selected.cells(2).innerText + ",TcmType=" + ui.selected.cells(10).innerText + ",Rating=" + ui.selected.cells(5).innerText + ",Amount=" + Amount + ",AuthorityGridKey=" + ui.selected.cells(9).innerText + ",CagName=" + ui.selected.cells(3).innerText 
         var keyValModify = ui.selected.cells(11).innerText + "," + ui.selected.cells(10).innerText + "," + ui.selected.cells(12).innerText + "," + ui.selected.cells(5).innerText + "," + ui.selected.cells(2).innerText + "," + Amount + "," + ui.selected.cells(3).innerText + "," + ui.selected.cells(9).innerText 
         $('#CancelViewParam').val(keyValue); 
         $('#ModifyViewParam').val(keyValModify); 

        } 
       } 
      }); 
     }); 
    </script> 

この関数は、グリッドから行を選択し、選択した値を非表示のフィールドに置きます。

また、ポップアップを開く関数は、この関数のajax call.codeの後には機能しません。

$(function() { 
    $("#DivSearch").dialog({ autoOpen: false, height: "600", width: "600", dialogClass: "myRatingHelp", modal: true }); 
    $('#bRatingHelperDivSearch').live('click',function() { $('#DivSearch').dialog('open'); }); 
    $('#DivSearchRating_bOk').click(function() { 
    $("#InputAuthorityGridSearch_Rating").val($("#hidRating").val()); 
    $("#DivSearch").dialog('close'); 
    }); 
    $('#DivSearchRating_bCancel').click(function() { 
    $("#DivSearch").dialog('close'); 
    }); 
    }); 

これらのすべての機能をAJX呼び出しの前に完璧にうまく動作しますが、すべてのコールの後に動作を停止し、誰かが助けることができますか?私はwebformsを使用していない、私はasp.net mvc3(かみそり)を使用しています

+1

Firefox、Safari、またはChromeでエラーコンソールをチェックしましたか? – reporter

+0

Internet Explorerを使用していますが、IEでエラーコンソールを表示する方法はありますか? – Parikshit

+0

IE 8以前では、非常に単純なエラーコンソールしか存在しませんでした。 javascriptエラーが発生し、以前に "javascriptエラーを表示する"というオプションを有効にした場合にのみ呼び出すことができます。私はコンソールがInternet Explorer 9でどれくらい快適に使えるかわかりません。あなたがソフトウェアをインストールできない場合は、Firefoxのモバイル版をダウンロードできます。私を信頼してください、これらのブラウザのコンソールは非常に効果的です。 – reporter

答えて

1

私は、もう動作しないコードがajax呼び出しの後に呼び出されないと思いますか? あなたのコードはまだ動作していますが、もはや起動されていない可能性があります。データグリッドの内容が変更されると、追加されたハンドラ/イベント/ ...はもうどの項目にも表示されません。

ハンドラ/イベント/ ...が新しいコンテンツにバインドされるように、ajax-callが完了した後にコードを再実行しようとしましたか?

また、.live()コードは、理論上常に動作するはずの唯一の部分です。ただし、liveは廃止された関数です。提案は、jQuery 1.7の前に.delegate()を使用するか、jQueryの後に.on()を使用することです。

+0

私はページをリフレッシュしようとしましたが、コードはリフレッシュ後に機能します。あなたは正しくグリッドの内容が変更された後にイベントがバインドされていないことを置く。ライブ機能を持つコードでも機能しません。デリゲート機能の例を挙げてください。 – Parikshit

+1

リフレッシュ後は、コードが呼び出されているので動作します。基本的には、ページの読み込み中に、Aエレメントにハンドラーを追加し、次にAエレメントを削除して(ハンドラーを削除する)、Aエレメントを介して新しいエレメントAを追加します。再度バインドしない限り、ハンドラーは再作成されません。私はBindMyHandlers()のような関数を作成することをお勧めします。この関数では、動作していないすべてのことを行い、ajax-callの成功呼び出しでBindMyHandlers()関数を呼び出します。 /// $(document).delegate( "td"、 "click"、function(){// code});もっと詳しい情報はこちら:http://api.jquery.com/delegate/ – Flater

+0

ありがとうございました – Anish

関連する問題