我创建了一个jqGrid,其中包含一些字段,例如:
job_id,姓名等
我正在尝试做的是,以便在单击job_id列中的值时,它将把它们重定向到:
job.php?job_id =(他们点击的值)
我首先尝试使用以下作为我的colModel:
{ name:'job_id', index:'job_id', edittype:'select', formatter:'showlink', formatoptions:{baseLinkUrl:'job.php'}, width:50, align:'center' }
但这导致重定向到:
job.php?job_id =(row_id)
我做了一些搜索,发现了该软件的开源版本的开发人员的帖子,建议使用以下colModel和其他JS:
{ name:'job_id', index:'job_id', edittype:'select', formatter:'showlink', formatoptions:{baseLinkUrl:'#'}, width:50, align:'center' } loadComplete: function() { var myGrid = $("#home_list"); var ids = myGrid.getDataIDs(); for (var i = 0, idCount = ids.length; i < idCount; i++) { $("#"+ids[i]+" a",myGrid[0]).click(function(e) { var hash=e.currentTarget.hash;// string like "#?id=0" if (hash.substring(0,5) === '#?id=') { var id = hash.substring(5,hash.length); var text = this.textContent; location.href="job.php?id="+text; } e.preventDefault(); }); } }
但这与IE不兼容。除此之外,当在jqGrid中显示大量行时,加载需要非常长的时间,例如500行需要5秒以上的时间。
我将继续努力,但这是其他人做的吗?
您使用了我的旧答案中的代码示例,因此我决定我应该回答您的问题。
我同意评论家关于代码性能的评论loadComplete。因此,您可以向我+1。$("#"+ids[i]+" a", myGrid[0])长循环内部的构造可以非常缓慢地工作。如果使用以下方法,则可以轻松解决问题
loadComplete
$("#"+ids[i]+" a", myGrid[0])
var getColumnIndexByName = function (columnName) { var cm = $(this).jqGrid("getGridParam", "colModel"), l = cm.length, i; for (i = 0; i < l; i++) { if (cm[i].name === columnName) { return i; // return the index } } return -1; }; var myGrid = $("#list"); myGrid.jqGrid({ ... loadComplete: function () { var i = getColumnIndexByName.call(this, 'Subcategory'); // nth-child need 1-based index so we use (i+1) below $("tbody>tr.jqgrow>td:nth-child(" + (i+1) + ")>a", this).click(function (e) { var hash=e.currentTarget.hash;// string like "#?id=0" if (hash.substring(0,5) === '#?id=') { var id = hash.substring(5, hash.length); var text = this.textContent || this.innerText; alert("clicked the row with id='"+id+"'. Link contain '"+text+"'"); location.href = "http://en.wikipedia.org/wiki/" + text; } e.preventDefault(); }); } });
您可以看到该演示版的改进版本与原始演示版完全一样。为了展示该方法在1000行上的性能,我创建了另一个演示。可以看到,新方法可以快速运行。
现在回到您的主要问题。表现最好的,如果你写你的,我们将得到自定义格式和unformatter而不是预先格式化的使用showlink。该代码可以是关于以下内容:
formatter: function (cellvalue, options, rowObject) { return "<a href=\"job.php?job_id=" + rowObject.job_id + "\">" + cellvalue + "</a>"; }, unformat: function (cellvalue, options, cellobject) { return cellobject.job_id; }
确切的代码取决于datatype您使用的是,是否使用的loadonce:true以及jsonReader使用的代码。例如,rowObject在您的情况下就是array,而您必须使用相应数据字段(如rowObject[4])的数组索引rowObject.job_id。
datatype
loadonce:true
jsonReader
rowObject
rowObject[4]
rowObject.job_id