jqGrid自定义输入元素需要父表的句柄
jqGrid custom input element needs handle to parent table
我正在使用jqGrid在页面上构建一个自定义的内联条目小部件。jqjGrid设置的相关部分是:
colModel:[ {
// Other columns removed.
{name:'ship',index:'ship', width:90, editable: true, sortable: false,
edittype: "custom",
editoptions:{ custom_element: customElement,
custom_value: customValue} }
],
我的回调函数是:
function customElement(value, options) {
var a = $("<input>").attr({
type: 'text',
size: 2,
value: value,
style: 'float: left'
}).add(
$("<span>").attr({
style: 'float: left; margin-top: 2px;',
'class': 'ui-icon ui-icon-search'
}).click(function() {
// My custom function here.
})
).appendTo($("<div>"));
return a;
}
这一切都很正常。
然而,我正在构建一个库来管理页面上的几个jqgrid表。我想使用相同的函数在其中几个表上构建自定义元素。问题是,这个特殊的click()
函数需要知道它正在处理哪个jquery表。
我可以在customElement
开始时通过一种巧妙的方式获得表ID,并在闭包中将其传递给函数:
var fieldID = options.id;
var rowID = fieldID.replace(/_.*/, "");
var containingTable = $("#" + rowID + "_id").closest("table");
但这假设列"id"存在于当前jqGrid中,并且它是较早的(向左)列。我不能使用"ship"列,因为它还没有创建。我也不能假设表中还有其他行会有"ship"列。
在customer_element处理程序中,如何可靠地获得"调用"表的句柄?
我同意这是jqGrid当前代码中的一个问题。没有简单而优雅的方法可以获得为其创建控件的网格的id。
你已经建议了一个变通方法。我可以建议你再使用一个版本来获取"调用表"的id。
自定义元素可用于各种编辑模式:内联编辑、表单编辑和单元格编辑。click
句柄接收事件对象e
.click(function(e) {
// My custom function here.
})
您可以检测"调用网格"的id。在内联编辑或单元格编辑的情况下,检测是最容易的。它将是
.click(function(e) {
var $grid = $(e.target).closest('table.ui-jqgrid-btable');
...
})
在表单编辑的click
事件处理程序内部,您可以使用
.click(function(e) {
// you can do the following
var $t = $(e.target).closest('table.EditTable'),
tid = $t.attr('id'); // id=TblGrid_list
if (typeof tid === "string" && tid.substr(0, 8) === 'TblGrid_') {
var gridId = tid.substr(8);
}
var grid = $('#' + $.jgrid.jqID(gridId));
// or the following
var $f = $(e.target).closest('form.FormGrid'),
fid = $f.attr('id'); // id=FrmGrid_list
if (typeof fid === "string" && fid.substr(0, 8) === 'FrmGrid_') {
var grid_id = tid.substr(8);
}
var mygrid = $('#' + $.jgrid.jqID(grid_id));
...
})
上面的代码使用了这样一个事实,即编辑表单包含两个元素,这些元素的id将基于网格的id构建:如果网格id="list",则编辑表单内部的<table>
元素具有id="TblGrid_list",而<form>
元素具有id="FrmGrid_list"。
与$('#' + gridId)
相比,$('#' + $.jgrid.jqID(gridId))
的使用更安全,因为当网格id包含元字符时,它会给出正确的结果。jqID
功能非常简单(请参见此处)。它只对jQuery选择器中使用的元字符进行转义。
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- jQuery自定义验证比较多个输入的序列
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 在wordpress一定时间后更改自定义字段
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 自定义函数中的光标位置
- 用于检查数组中是否存在元素的javascript自定义方法
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- Meteor-添加用户自定义字段的方法不起作用
- 自定义表单验证和提交
- jQuery工具验证器自定义效果-添加&消除影响
- AngularJS:自定义 404 拦截器句柄 - 带有 URL 的响应
- 节点.js + 表达式错误:无法读取未定义的属性“句柄”
- 无法读取未定义的属性“句柄”.Parse.com 迁移
- jqGrid自定义输入元素需要父表的句柄
- jQuery错误TypeError: $.event.句柄未定义
- 句柄未定义为对象
- 聚合物句柄单击自定义元素子元素中的事件
- 在D3 V4中添加自定义笔刷柄