我使用showlink formatter将列作为链接.有什么方法可以在我点击它时调用javascript函数.
现在这是我的代码
$("#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'}},
Run Code Online (Sandbox Code Playgroud)
...
我不想使用baselinkUrl.相反,我可以在点击URL时调用Javascript函数吗?当我使用'showlink'格式化程序时,我的表单数据似乎也没有发布到下一个屏幕.
Ole*_*leg 12
你可以用不同的方式做到这一点.第一种是以formatter:'showlink'如下形式使用
formatoptions: {
baseLinkUrl: 'javascript:',
showAction: "MyBase.GetAndShowUserData(jQuery('#list'),'",
addParam: "');"
}
Run Code Online (Sandbox Code Playgroud)
(详见我的旧答案).它将产生<a>链接
href="javascript:MyBase.GetAndShowUserData(jQuery('#userlist'),'?id=rowId');"
Run Code Online (Sandbox Code Playgroud)
where rowId将是相应网格行的id.在自定义全局函数内部,您MyBase.GetAndShowUserData应该"?id="从第二个参数中删除前缀.因此,您将能够访问网格,并且您将知道所选的ID.
另一种方法是编写自己的自定义格式化程序而不是使用formatter:'showlink'.
在我看来,这两种方法的主要缺点是使用全局函数.此外,我更喜欢遵循不引人注目的JavaScript的概念.所以我可以从三角形论坛的答案中建议你另一种方式.我们的想法是使用showlink带有'#'的预定义格式化程序作为href属性的值,并绑定到函数click内部链接的事件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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
在这里看现场演示.在演示中,如果你点击表格中的"物理"这样的文字,它将打开网址http://en.wikipedia.org/wiki/Physics,它将构建动态.我添加了一个额外的警报,以显示如何解码有关行id的信息.
更新:loadComplete在另一个答案中查看改进的代码(从性能方面).
| 归档时间: |
|
| 查看次数: |
16603 次 |
| 最近记录: |