Vinculando de um valor de coluna em jqGrid para uma nova página usando GET

Eu criei um jqGrid que contém alguns campos como:

job_id, nome, etc

O que estou tentando fazer é fazer com que, ao clicar no valor na coluna job_id, ele os redirecione para:

job.php? job_id = (valor que eles clicaram em)

Comecei tentando usar o seguinte como meu colModel:

{ name:'job_id', index:'job_id', edittype:'select', formatter:'showlink', formatoptions:{baseLinkUrl:'job.php'}, width:50, align:'center' } 

Mas o que isso resulta é um redirecionamento para:

job.php? job_id = (row_id)

Fiz algumas pesquisas e encontrei um post do desenvolvedor da versão de código aberto deste software que sugeriu o uso do seguinte colModel e JS adicional:

 { 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(); }); } } 

Mas isso não é compatível com o IE. Além disso, ao exibir um grande número de linhas no jqGrid, demora muito para carregar, digamos, 5 segundos + para 500 linhas.

Vou continuar trabalhando nisso, mas isso é algo que qualquer outra pessoa fez?

Você usou o exemplo de código da minha resposta antiga, então eu decidi que deveria responder sua pergunta.

Concordo com a crítica sobre o desempenho do código do loadComplete . Então, +1 de mim para sua pergunta. A construção $("#"+ids[i]+" a", myGrid[0]) dentro do loop longo pode funcionar muito lentamente. Pode-se consertar facilmente o problema se alguém usar o seguinte

 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(); }); } }); 

Você pode ver que a versão melhorada da demonstração funciona exatamente como a demonstração original . Para mostrar o desempenho do método em 1000 linhas, criei mais uma demonstração . Pode-se ver que o novo método funciona rapidamente.

Agora voltemos ao seu problema principal. O melhor desempenho que receberemos se você escrever o formatador e o formatador personalizados em vez do uso do formatlink de formatador predefinido. O código pode ser sobre o seguinte:

 formatter: function (cellvalue, options, rowObject) { return "" + cellvalue + ""; }, unformat: function (cellvalue, options, cellobject) { return cellobject.job_id; } 

O código exato depende de qual datatype você usa, se você usa loadonce:true ou não e qual jsonReader você usa. Pode ser, por exemplo, que rowObject seja array no seu caso e você tenha que usar o índice de array do campo de dados correspondente (como rowObject[4] ) em vez de rowObject.job_id .

ATUALIZADO : Acho que a melhor maneira de implementar será o uso de onCellSelect ou beforeSelectRow em vez de vincular o evento de clique a todos os elementos da coluna. Eu recomendo ler as seguintes respostas para detalhes: esta , outra e mais uma resposta antiga .