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',formatoptions:{baseLinkUrl:'#'},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])可以非常缓慢地工作.如果使用以下内容,可以轻松解决问题
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,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(); }); } });
您可以看到the demo的改进版本与the original demo完全相同.为了在1000行上显示方法的性能,我创建了one more demo.可以看到新方法可以快速工作.
现在回到你的主要问题.如果您编写custom formatter和unformatter而不是使用预定义格式化程序showlink,我们将获得最佳性能.代码可以是以下内容:
formatter: function (cellvalue,options,rowObject) { return "<a href=\"job.PHP?job_id=" + rowObject.job_id + "\">" + cellvalue + "</a>"; },unformat: function (cellvalue,cellobject) { return cellobject.job_id; }
确切的代码取决于您使用的数据类型,是否使用loadonce:true或不使用以及您使用的jsonReader.例如,在您的情况下,rowObject是数组,您必须使用它
数据字段的数组索引(如rowObject [4])而不是rowObject.job_id.
更新:我认为最好的实现方式是使用onCellSelect或beforeSelectRow,而不是将click事件绑定到列中的每个元素.我建议您阅读以下答案以获取详细信息:this one,another one和one more old answer.