jqgrid showLink

Estoy usando el formateador showlink para hacer una columna como un enlace. ¿Hay alguna manera de llamar a una función de JavaScript cuando hago clic en eso?

En este momento este es el código que tengo

$("#list").jqGrid( { url: '..', datatype: 'json', //We specify that the datatype we will be using will be JSON colNames:['ID', 'User Name'], colModel :[ {name:'id',index:'id', width:110, sorttype:"string", formatter: 'showlink', formatoptions:{baseLinkUrl:'index.cfm'}}, 

No quiero usar baselinkUrl. En su lugar, ¿puedo llamar a una función de Javascript al hacer clic en la URL? Además, parece que los datos de mi formulario no se publican en la siguiente pantalla cuando uso el formateador ‘showlink’.

Puedes hacer esto de diferentes maneras. El primero es usar el formatter:'showlink' en forma similar a la siguiente

 formatoptions: { baseLinkUrl: 'javascript:', showAction: "MyBase.GetAndShowUserData(jQuery('#list'),'", addParam: "');" } 

(ver mi respuesta anterior para más detalles). Producirá el enlace con

 href="javascript:MyBase.GetAndShowUserData(jQuery('#userlist'),'?id=rowId');" 

donde rowId será el id de la fila de grilla correspondiente. Dentro de su función global personalizada MyBase.GetAndShowUserData debe cortar el prefijo "?id=" del segundo parámetro. Entonces podrá acceder a la grilla y sabrá la identificación seleccionada.

Una forma más de hacerlo es escribir tu propio formateador personalizado en lugar del uso del formatter:'showlink' .

La principal desventaja de ambos enfoques en mi opinión es el uso de funciones globales . Además, prefiero seguir el concepto de JavaScript discreto . Entonces puedo sugerirte otra forma de mi respuesta en el foro de Trirand. La idea es usar el formateador predefinido showlink con ‘#’ como el valor del atributo href y hacer vinculante al evento click del enlace dentro de la función loadComplete :

 colModel: [ { name: 'Subcategory', formatter:'showlink',formatoptions:{baseLinkUrl:'#'} ... loadComplete: function() { var myGrid = $("#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 || this.innerText; alert("clicked the row with id='"+id+"'. Link contain '"+text+"'"); location.href="http://en.wikipedia.org/wiki/"+text; } e.preventDefault(); }); } } 

ver demostración en vivo aquí . En la demostración, si hace clic en el texto como "Física" en la tabla, se abrirá la URL http://en.wikipedia.org/wiki/Physics que será dinámica de comstackción. Incluí una alerta adicional para mostrar cómo decodificar información sobre la identificación de fila adicionalmente.

ACTUALIZADO: Mire el código mejorado (desde el lado del rendimiento) de loadComplete en otra respuesta .