Jqgrid, dataEvent не работает для edittype: custom - PullRequest
1 голос
/ 08 февраля 2012

Я новичок в jqgrid, у меня есть столбец, тип редактирования которого настраивается.

После того, как данные строки отредактированы, я хочу, чтобы строка сохранялась при размытии (когда я щелкаю за пределами выбранной строки), для этой цели я использовал dataEvent, но он не работает.

Я использую Jqgrid версии 4.1.

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему.

Я прикрепил часть моего кода ниже:

{ name: 'Roles', index: 'Roles', align: 'left', editable: true, 
  edittype: "custom",
  editoptions: {custom_element: renderRoleColumn, custom_value: roleColumnValue,
                dataEvents: [{ type: 'blur',
                               fn: function (e) {
                                    alert("roles");
                               }
                             }]
               }
}

1 Ответ

2 голосов
/ 09 февраля 2012

Вы правы. Текущая реализация jqGrid не использует dataInit или dataEvents на (см. исходный код jqGrid, но не вызывайте options = bindEv(elem,options), как для всех других типов редактирования). Проблема только в том, что я не уверен, что это ошибка. В документации jqGrid описаны действительно все шаги, которые выполняются в случае edittype: "custom".

Я не вижу, что это проблема. Вы можете делать любые привязки внутри custom_element. Вы не опубликовали какой-либо код renderRoleColumn и roleColumnValue, который используете, но если вы связали бы дескриптор события blur с пользовательским элементом, который вы вернули, он будет работать.

ОБНОВЛЕНО : Ваш пользовательский модуль форматирования renderRoleColumn возвращает <div> с элементами <select> и <input> в качестве дочерних элементов. <div> не может иметь фокус и не будет обрабатывать событие blur. Поэтому вы должны связать blur с дочерними элементами <select> и <input>. Код может быть похож на следующий

function renderRoleColumn() {
    //... your current code which generate HTML fragment in the roleDiv as string

    // create DOM element from the HTML fragment with jQuery wrapper
    var $custom = $(roleDiv);

    // make binding to children
    $custom.find('select,input').blur(function (e) {
        alert('blur on ' +
            e.target.tagName.toLowerCase() +
            ' id=' + e.target.id);
    });

    return $custom[0]; // return roleDiv as DOM element
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...