Vinculación desde un valor de columna en jqGrid a una página nueva usando GET

He creado un jqGrid que contiene algunos campos como:

job_id, nombre, etc.

Lo que trato de hacer es hacer que al hacer clic en el valor en la columna job_id, los redireccione a:

job.php? job_id = (valor en el que hicieron clic)

Empecé tratando de usar lo siguiente como mi colModel:

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

Pero lo que esto produce es una redirección a:

job.php? job_id = (row_id)

Realicé algunas búsquedas y encontré una publicación del desarrollador de la versión de código abierto de este software que sugirió usar el siguiente colModel y 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(); }); } } 

Pero esto no es compatible con IE. Además de esto, cuando se muestra una gran cantidad de filas en el jqGrid, lleva mucho tiempo cargar, digamos 5 segundos + para 500 filas.

Voy a seguir trabajando en esto, pero ¿es algo que alguien más ha hecho?

Utilizaste un ejemplo de código de mi respuesta anterior, así que decidí que debería responder a tu pregunta.

Estoy de acuerdo con el crítico sobre el rendimiento del código de loadComplete . Así que +1 de mí para su pregunta. El constructo $("#"+ids[i]+" a", myGrid[0]) dentro del bucle largo puede funcionar muy lentamente. Uno puede solucionar el problema fácilmente si uno usará lo siguiente

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

Puede ver que la versión mejorada de la demostración funciona exactamente como la demostración original . Para mostrar el rendimiento del método en 1000 filas, creé una demostración más . Uno puede ver que el nuevo método funciona rápidamente.

Ahora volvamos a tu problema principal. El mejor rendimiento que recibiremos si escribe su formateador y desentrelazado personalizados en lugar de usar el formateador predefinido showlink . El código puede ser acerca de lo siguiente:

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

El código exacto depende del datatype que use, ya sea que use loadonce:true o no y que jsonReader use. Puede ser, por ejemplo, que rowObject es una matriz en su caso y debe usar el índice de matriz del campo de datos correspondiente (como rowObject[4] ) en lugar de rowObject.job_id .

ACTUALIZADO : Creo que la mejor forma de implementación será el uso de onCellSelect o beforeSelectRow en lugar de vincular el evento de clic a cada elemento de la columna. Recomiendo leer las siguientes respuestas para más detalles: esta , otra y otra respuesta anterior .