Я использую 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
и передать его в замыкании функции:
var fieldID = options.id;
var rowID = fieldID.replace(/_.*/, "");
var containingTable = $("#" + rowID + "_id").closest("table");
Но это предполагает, что столбец "id" существует в текущем jqGrid, и это более ранний (левый) столбец. Я не могу использовать столбец "корабль", потому что он еще не был создан. Я не могу предположить, что есть другие строки в таблице, у которых также был бы столбец "ship".
Как я могу в обработчике custom_element надежно получить дескриптор "вызывающей" таблицы?