2015-04-01 83 views
1

我是MVC的新手,並試圖拋光webgrid的概念。我在viewJavaScript不工作在排序或分頁後的MVC webgrid

@model IEnumerable<MVCMovies.Models.Movie> 
@{ 
    ViewBag.Title = "Index";  

} 
<script type="text/javascript"> 
$(function() { 
    $('tbody tr').on('hover', (function() { 
     $(this).toggleClass('clickable'); 
    })); 
    $('tbody tr').on('click', (function() { 
     alert('rajeev'); 
    })); 
}); 
</script> 
<style type="text/css"> 
    .table { 
    margin: 4px; 
    width: 100%; 
    background-color: #FCFCFC; 
} 

.head { 
    background-color: #11E8CD; 
    font-weight: bold; 
    color: #CC6699;  
} 

.webGrid th, .webGrid td { 
    border: 1px solid #C0C0C0; 
    padding: 5px; 
    color:white; 
} 

.altRow { 
    background-color: #E4E9F5; 
    color: #000; 
} 

.gridHead a:hover { 
    text-decoration: underline; 
} 

.description { 
    width: auto; 
} 

.selectRow { 
    background-color: #0B7BEB; 
} 
.clickable { 
    cursor: pointer; 
    background: #ffff99; 
} 
</style> 
<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<div> 
    @using (Html.BeginForm()) 
    { 
    @Html.AntiForgeryToken() 
    <div style="float:left">Title : @Html.TextBox("SearchString")<br />   </div> 
     <div style="float:left; padding-left:5px"> 
     <input type="button" value="Filter" class="btn" /> 
    </div> 
    } 
</div> 
    <div id="grid"> 
    @{ 
    var gd = new WebGrid(Model, rowsPerPage: 2, ajaxUpdateContainerId: "grid"); 
     @gd.GetHtml(tableStyle: "table"); 
    } 

</div> 


    @section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

現在下面的代碼,我的jQuery編寫的代碼的點擊行functinon但它停止工作後,我整理或的WebGrid做分頁

+0

運行代碼時出現什麼錯誤? – 2015-04-01 09:03:59

+0

沒有錯誤,但JavaScript代碼停止工作.. I.e排序行後沒有alert msg點擊 – 2015-04-01 09:04:46

+1

您是否動態更新錶行? - 如果是的話,使用事件委託 - '$(document).on('click','tr',(function(){...' – 2015-04-01 09:05:27

回答

2

對錶格內容進行排序得到刷新。試試這個

$(function() { 
     $(document).on('click', 'tbody tr', (function() { 
      alert('rajeev'); 
     })); 
     $(document).on({ 
      mouseenter: function() { 
       $(this).toggleClass('clickable'); 
      }, 
      mouseleave: function() { 
      } 
     }, 'tbody tr'); 
    }); 
+0

正確! ,因此事件必須按照你的方式進行授權 – Jai 2015-04-01 09:22:48

+0

只適用於'click'。即使在第一次加載時,'hover'部分仍然不能正常工作 – 2015-04-01 09:31:44

+0

你可以使用mouseenter和mouseleave做檢查 – 2015-04-01 10:02:40

0

你應該使用委託:

$(function() { 
    $('tbody').on('hover', 'tr', function() { 
     $(this).toggleClass('clickable'); 
    }); 
    $('tbody').on('click', 'tr', function() { 
     alert('rajeev'); 
    }); 
}); 

您的初始代碼將事件處理函數直接綁定到tr元素。在排序和分頁時,該行被重新渲染,因此處理程序丟失。

+0

不工作!!! – 2015-04-01 09:07:28

0

試試這個

<script type="text/javascript"> 
    $(function() { 
     $('tbody tr').live('hover', (function() { 
      $(this).toggleClass('clickable'); 
     })); 
     $('tbody tr').live('click', (function() { 
      alert('rajeev'); 
     })); 
    }); 
    </script> 
+0

不工作... – 2015-04-01 09:24:26

4

的ajaxUpdateCallback是JavaScript函數將調用服務器調用完成後的名稱。這將允許你在分頁或排序後調用你的jQuery函數。

@ { var grid = new WebGrid(data, ajaxUpdateContainerId : "grid", 
      ajaxUpdateCallback: "callBack"); 
    } 
+1

這是處理和綁定事件的最佳程序。 不錯的努力和回答 – 2015-09-07 11:14:38