JqGrid нужна гиперссылка - нужно захватить значение через Jquery
У меня есть следующее в моем коде:
{ name: 'ID', index: 'ID', width: 40 , formatter: 'showlink', search: false, formatoptions: { baseLinkUrl: '/Program/EditMicro'} },
Когда я нажимаю на PNum, происходит следующее: мой контроллер выполняет следующее действие:
/Program/EditMicro
Вместо этого я хотел бы захватить эту информацию через Jquery о том, что было выбрано (какой ID был выбран), так как я хочу сделать некоторый JSON, прежде чем он будет отправлен в следующий ActionResult
/Program/EditMicro
Итак, чтобы подвести итог, есть ли в любом случае, чтобы захватить то, на что щелкает значение гиперссылки, и тогда я могу захватить это в Jquery.
заранее спасибо
2 ответа
В большинстве случаев достаточно использовать что-то вроде
formatter: "showlink",
formatoptions: {
baseLinkUrl: "/Program/",
showAction: "EditMicro",
idName: "myId"
}
В случае, если ссылки будут созданы как
<a href="/Program/EditMicro?myId=123">text from the cell</a>
Если у вас в действии есть идентификатор строки, вы можете получить любую другую дополнительную информацию, которая вам нужна, непосредственно из базы данных.
В качестве альтернативы вы можете использовать простой трюк, описанный в ответе. Вы определяете класс CSS
.myLink { text-decoration: underline; cursor: pointer; }
Тогда вы можете использовать пользовательский форматер, как показано ниже
formatter: function (cellValue, options, rowObject) {
return "<span class='myLink'>" + cellValue + "</span>";
},
cellattr: function () {
return " title=\"Click here to go to EditMicro\"";
}
Как вы будете генерировать <span>
которые выглядят для пользователя как ссылка. Вы можете поймать событие нажатия на ячейку, используя beforeSelectRow
или же onCellSelect
Перезвоните. Например
beforeSelectRow: function (rowid, e) {
var $td = $(e.target).closest("td"),
iCol = $.jgrid.getCellIndex($td[0]);
if (this.p.colModel[iCol].name === 'note') {
window.location = "/Program/EditMicro/" +
encodeURIComponent(rowid);
return false;
}
}
При необходимости вы можете использовать getCol
или же getRowData
получить любые другие данные из строки, по которой щелкнули, и добавить информацию к целевому URL.
Вы можете добавить следующее к вашей декларации jqGrid, чтобы предотвратить запуск действия щелчка по умолчанию.
.click(function (event) { event.preventDefault(); })
Затем вы можете сделать что-то вроде своего собственного обработчика события клика через
$('a').click(function () { //ToDo: Extra actions before submitting to controller });
Вы также можете создать свой собственный модуль форматирования, чтобы добавить дополнительную информацию к гиперссылке, которую вы собираетесь отображать, чтобы выполнять эту работу во время построения сетки.
Изменить: Рабочий пример, в котором я отключил функцию щелчка по умолчанию и привязал свою собственную, чтобы отобразить предупреждение (в качестве примера, чтобы показать, где вы будете кодировать свою собственную функцию для выполнения дополнительной работы, которую вы хотите выполнить). http://jsfiddle.net/QEzhr/33/