2011-04-17 72 views
1

我在這個網站上看到很多類似的問題,所以我很抱歉這是我不明白答案的問題的重複。但在這裏,它是:我的問題是「的jQuery(」#tmpgrid「)(通過螢火蟲)當這個代碼塊被觸發jqgrid不是使用onSelectRow的函數

 onSelectRow: function (id) { 
      var listid = jQuery('#tmpgrid').getCell(id, "Item id"); 
      $(window.location).attr('href', '/template/details/' + listid); 
     } 

這個asp.net mvc的部分頁面內getCell不是一個函數。」

<table id="tmpgrid"> 
</table> 
<div id="tmppager"> 
</div> 
<script type="text/javascript"> 
    var grid = $('#tmpgrid'); 
    grid.jqGrid({ 
     url: '/template/jsontemplate', 
     datatype: "json", 
     height: "auto", 
     autowidth: true, 
     colNames: ['Item id', 'Title', 'Create Date', 'Edit Date', 'Public'], 
     colModel: [ 
     { name: "id", index: "id", width: 25, search: false }, 
     { name: "Title", index: "Title", search: true, searchoptions: { sopt: ['cn']} }, 
     { name: "CreateDate", index: "CreateDate", width: 50, search: false }, 
     { name: "EditDate", index: "EditDate", width: 50, search: false }, 
     { name: "IsPublic", index: "IsPublic", width: 25, search: false } 
     ], 
     rowNum: 10, 
     rowList: [10, 20, 30], 
     pager: '#pager', 
     sortname: 'CreateDate', 
     emptyrecords: 'No records to display', 
     ignoreCase: true, 
     viewrecords: true, 
     caption: "My Checklists", 
     onSelectRow: function (id) { 
      var listid = jQuery('#tmpgrid').getCell(id, "Item id"); 
      $(window.location).attr('href', '/template/details/' + listid); 
     } 
    }); 
    grid.jqGrid('navGrid', '#tmppager', { edit: false, add: false, del: false, searchtext: 'Search' }); 
</script> 

我見過Oleg's posts有關腳本加載/順序的問題,但我不相信這是我的問題(也許我沒有正確理解的解決方案) - 因爲我沒有使用開發者因此只有2個js文件:「grid.locale-en.js」和「jquery.jqgrid.min.js」。另外,我不確定這是否仍然適用於過去3.7.2的jqgrid版本。我正在使用最新的4.0.0版本

我在這裏撞牆。有任何想法嗎?

+0

另注:我已經試過getCell命令的排列。似乎有3-4種方法來完成語法,但迄今爲止所有的方法都導致了相同的錯誤。 – Roger 2011-04-17 02:51:51

+0

@mu,這是「未定義」 – Roger 2011-04-17 03:33:53

+0

相同,未定義。 – Roger 2011-04-17 04:31:34

回答

1

我認爲jqGrid使用jQuery-UI風格的方法調用。基於these examples,你需要調用getCell這樣的:

$('#tmpgrid').jqGrid('getCell', id, 'Item id'); 
+0

我也試過這個,結果也一樣。 「jqGrid不是一個函數」 - 我的存在的禍根!我認爲從函數內部調用jqGrid可能有些不尋常之處。例如,當我將所有腳本項目包裝在$(document).ready中時,grid.jqGrid的第一次調用就表明它不是一個函數。 – Roger 2011-04-17 04:56:02

+0

你確定你正在包含jQuery和jqGrid JavaScript文件,對吧?你有可能在jsfiddle.net上設置一個例子嗎? – 2011-04-17 05:08:46

+0

感謝您的幫助。您使用jsfiddle的建議讓我走向正確的道路,找到我的telerik問題 – Roger 2011-04-17 18:15:33

0

我想,你必須使用「新的API」的風格。我的意思是你是在如下表(見documentation)包含的JavaScript的jqGrid:

<script src="js/i18n/grid.locale-en.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    jQuery.jgrid.no_legacy_api = true; 
</script> 
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script> 

在這種情況下,你應該「新的API」風格,您使用最jqGrid的方法。例如

var listid = jQuery('#tmpgrid').jqGrid('getCell', id, "Item id"); 

代替

var listid = jQuery('#tmpgrid').getCell(id, "Item id"); 
2

你會相信它是與另一個腳本的交互?我在網站上有一些telerik組件,當我將@ Html.Telerik()。ScriptRegistrar()組件拉出時,jqGrid開始正常工作。

嗯......現在讓我們擺脫那些telerik組件。無論如何,我一直在計劃這個。

感謝您的幫助!

+0

我也在Telerik手中受苦!我閱讀這篇文章(http://www.telerik.com/help/aspnet-ajax/introduction-using-jquery.html),它說當你使用Telerik時,Jquery會自動包含在頁面中,但$總是未定義的...但是當我手動添加Jquery時 - 我遇到了類似的問題 – RobD 2011-06-09 14:56:14

0

一位同事剛剛解決了這個問題 - $('#xyz')與$ get('#xyz')相同,它返回一個dom對象,您只能調用dom方法。

然而$ find()方法,將讓你的實際對象,其預計方法