2011-12-28 12 views
0

我正在做一個帖子回來得到一個局部視圖使用ajax以下是我用來渲染局部視圖中的代碼稱爲'DivSearchGrid' 。jquery不工作後ajax call.asp .net mvc3(剃刀)

<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 2011-12-28 09:03:58

+0

我使用的是Internet Explorer,如何在IE中查看錯誤控制檯? – Parikshit 2011-12-28 10:04:57

+0

在IE 8和更舊版本中只存在一個非常簡單的錯誤控制檯。只有在發生javascript錯誤時,纔可以調用它,並且您之前已激活了「show javascript errors」選項。我不知道IE 9中的控制檯有多舒服。如果你不能安裝任何軟件,你可以下載Firefox的移動版本。相信我/我們,這些瀏覽器的控制檯非常有效。 – reporter 2011-12-28 10:17:15

回答

1

我認爲沒有工作的代碼不會在ajax調用之後調用? 您的代碼似乎仍然有效,但不會再被觸發。隨着數據網格的內容發生變化,您添加的處理程序/事件/ ...將不再響應任何項目。

在ajax調用完成後,您是否嘗試重新執行代碼,以便處理程序/事件/ ...被綁定到新內容?

另外:.live()代碼是理論上應該始終有效的唯一部分。但是,live是一個不推薦的功能。建議在jQuery 1.7之前使用.delegate()或者在jQuery 1.7之後使用.on()

+0

我嘗試刷新頁面,代碼在刷新後工作。你把它正確的事件沒有被綁定後,網格的內容被改變。即使帶有實時功能的代碼不起作用。你能舉一個委託功能的例子嗎? – Parikshit 2011-12-28 09:15:04

+1

刷新後可以正常工作,因爲代碼正在被調用。基本上,你在頁面加載時所做的是向元素A添加處理程序,然後刪除元素A(從而刪除處理程序),然後通過ajax添加新元素A.處理程序不會被重新創建,除非您再次綁定它。我會建議做一個像BindMyHandlers()這樣的函數,在這個函數中你可以做所有你提到的不工作的東西,然後在你的ajax-call的成功調用中調用BindMyHandlers()函數。 /// $(document).delegate(「td」,「click」,function(){// code});更多信息在這裏:http://api.jquery.com/delegate/ – Flater 2011-12-28 12:08:09

+0

感謝它適用於我 – Anish 2012-02-09 14:28:33