我同意预定义的格式化程序showlink面向超链接,当您需要在点击链接时启动自定义JavaScript函数时,它并不舒服。尽管如此,在the answer,你会发现解释如何在案件中使用showlink
的代码。
如果你想添加编辑/删除/在单独的列自定义链接你可以很容易使用dynamicLink
我写的和描述here。你说得对,如果你写出你在onclick
属性<a>
中调用的函数必须在全局级别上定义。您不应该忘记,可以使用一些常用的全局名称空间,如jQuery
,并定义可从jQuery
名称空间调用的许多函数。例如您可以从here下载的dynamicLink
可以与showlink
相同的方式使用。例如
{ name: 'editlink', formatter: 'dynamicLink',
formatoptions: {
onClick: function (rowid, iRow, iCol, cellText, e) {
// any your code
}
}}
在实现从dynamicLink
方法$.fn.fmatter.dynamicLink.onClick
将在onclick
属性来使用。
如果你喜欢使用unobtrusive JavaScript style我建议你阅读以下答案:this,this和this与相应的演示this,this和this。或者您可以使用doInEachRow这简化了一点枚举
loadComplete: function() {
var iCol = getColumnIndexByName.call(this, 'editlink'); // get index of the column
$(this).jqGrid('doInEachRow', function (row, rowId, localRowData) {
$(row.cells[iCol]).children("a").click(function (e) {
e.preventDefault();
// any your code here
});
});
}
其中
var getColumnIndexByName = function (columnName) {
var $this = $(this), cm = $this.jqGrid('getGridParam', 'colModel'), i,
l = cm.length;
for (i = 0; i < l; i++) {
if (cm[i].name === columnName) {
return i; // return the index
}
}
return -1;
};
如果你把很多<a>
超链接在一列中,您可以轻松修改的情况下上面的代码。在您可以将$(row.cells[iCol]).children("a").click(function (e) {
的部分.children("a")
部分替换为.children("a").eq(0)
或.children("a").eq(1)
和.children("a").eq(2)
以定义与第一,第二或第三超链接(“编辑”/“添加”/“删除”)的绑定。您最好将$(row.cells[iCol]).children("a")
保存在一个变量中,并使用.eq(1)
和变量。
还有一种方法是不定义任何<a>
全部和使用例如<span>
而不是(带下划线装饰或有背景图像)。在这种情况下,您不需要禁止默认的超链接动作,并且点击事件将会冒泡直至定义网格主体的<table>
元素。因此,您可以使用onCellSelect
或beforeSelectRow
事件来绑定您的JavaScript代码。事件的Event
(e
参数)可用于获取有关被点击的行和列的所有信息。 var $cell = $(e.target).closest('td')
将得到您单击的单元格,var $row = $cell.closest('tr.jqgrow')
将让你的点击一行,$row.attr('id')
将是ROWID和var iCol = $.jgrid.getCellIndex($cell[0])
让你列索引。 this.p.colModel[iCol].name
是被点击的列的名称。你可以阅读更多here。
你怎么能看到你,你可以使用真正的许多选项。所以你可以选择更好地符合你的要求的方式。
非常感谢您的建议。这给了我一些信心。我会尽力实施每种方法,并让你知道我选择哪一种。 –
@KishanKanugula:不客气!我希望你不会因为这么多的可能性而感到沮丧。我决定用很多方式来描述你,因为首先最好的选择取决于用例,你的问题很常见。所以我希望能够帮助其他有相同问题的用户。 – Oleg
我尝试使用dynamiclink。我不认为我可以使用这个插件仪式?因为它绑定到在jqgrid.js中定义的$ .fn.fmatter。你的意思是在jqrid.js中复制这段代码吗? –