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/

Другие вопросы по тегам