Я хотел бы проверить любой доза проверки огонь или нет, прежде чем нажать на кнопку - PullRequest
0 голосов
/ 12 июля 2011

У меня есть JQGrid с включенным редактированием на месте. Поле базы данных Имя (обязательно) Фамилия (не обязательно)

следующие сценарии:

1. сетка с кнопками Редактировать и Удалить.
2. затем нажмите «Изменить» («Редактировать», «Удалить» - скрыть) и («Сохранить», «Отмена» - отобразится).
3. Я очистил значение из текстового поля FirstName.
4. Я нажал кнопку «Отправить», после чего отобразится сообщение «Имя: Поле обязательно для заполнения» Это правильно
5. но за этим моя кнопка (Сохранить, Отмена заменит на Редактировать, Удалить , это неправильно )

Я бы хотел поставить контрольную точку в следующей функции

function inplaceSave(id) {
        //Check point is required for Any Validation violation or unsuccessful save 
        jQuery('#list').saveRow(id);
        //if it is success then following method should called else couldn't
        changeActionState('save', id);
    }

следующий код:

jQuery(document).ready(function () {
        //$.jgrid.defaults.loadtext = '';
        jQuery("#list").jqGrid({
            url: '@Url.Action("JQGridGetGridData", "TabMaster")',
            datatype: 'json',
            mtype: 'GET',
            colNames: ['col ID', 'First Name', 'Last Name', ''],
            colModel: [
                      { name: 'colID', index: 'colID', width: 100, align: 'left', searchoptions: { sopt: ['eq', 'ne', 'cn']} },
                      { name: 'FirstName', index: 'FirstName', width: 150, align: 'left', editable: true, editrules: { required: true, number: true, minValue: 40, maxValue: 100} },
                      { name: 'LastName', index: 'LastName', width: 150, align: 'left', editable: true },
                      { name: 'Edit', index: 'Edit', width: 70, align: 'center', editable: false, formatter: editFmatter, unformat: unformatEdit }
                    ],
            pager: jQuery('#pager'),
            hidegrid: false,
            rowNum: 100, 
            rowList: [10, 50, 100, 150],
            sortname: 'colID',
            sortorder: "asc",
            viewrecords: true,
            multiselect: false,
            //rownumbers: true, 
            imgpath: '@Url.Content("~/Scripts/themes/steel/images")',
            caption: 'Tab Master Information',
            editurl: '@Url.Action("JQGridEdit", "TabMaster")'
        }).navGrid('#pager', { edit: false, add: false, del: false, search: false, refresh: false });
    });
function inplaceEdit(id) {
        jQuery('#list').editRow(id);
        changeActionState('edit', id);
    }
    function inplaceCancel(id) {
        jQuery('#list').restoreRow(id);
        changeActionState('cancel', id);
    }
    function inplaceSave(id) {
        jQuery('#list').saveRow(id);
        changeActionState('save', id);
    }
 function changeActionState(action, id) {
        if (action == 'edit') {
            jQuery('#action_edit_' + id).css('display', 'none');
            jQuery('#action_delete_' + id).css('display', 'none');
            jQuery('#action_save_' + id).css('display', 'block');
            jQuery('#action_cancel_' + id).css('display', 'block');
        }
        else {
            jQuery('#action_edit_' + id).css('display', 'block');
            jQuery('#action_delete_' + id).css('display', 'block');
            jQuery('#action_save_' + id).css('display', 'none');
            jQuery('#action_cancel_' + id).css('display', 'none');
        }
    }

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Я решил эту проблему самостоятельно , используя модифицированную функцию inplaceSave и добавил новую функцию checkSave .

Вот обновленный код.

 function inplaceSave(id) {
       jQuery('#list').saveRow(id, checkSave);
   }
   function checkSave(result) {
       if (result.responseText.toLowerCase() == 'success') {
           changeActionState('save', this.rowid);
           refreshGrid();
       }
   }

Спасибо,
Imdadhusen

0 голосов
/ 12 июля 2011

Встроенный метод редактирования (не редактирования на месте), такой как editRow , имеет гораздо больше параметров.Дополнительные параметры позволяют выполнять различные действия в случае успешной и неуспешной проверки данных или сохранения данных.

Какую версию jqGrid вы используете?Почему вы продолжаете использовать такой параметр как imgpath?Почему бы вам не использовать только форматтер: «действия»?Кажется, делать именно то, что вам нужно.Кроме того, из вашего кода неясно, как и когда будет вызываться inplaceSave.

Более того, код editFmatter, который вы выложили в качестве решения в одном из ваших предыдущих вопросов , кажетсянеправильно.Он может работать для некоторого пространственного содержимого столбца Edit, который вы отправляете с сервера и который не включен в текст ваших вопросов.Пользовательский форматер имеет в качестве входных данных общий текст ячейки.Выражение $(el) в коде function editFmatter(el, cellval, opts) {...;$(el).html(finalHTML) не имеет смысла.Параметры пользовательского форматера (cellvalue, options, rowObject).Возможно, вы хотите использовать пользовательское редактирование , а не пользовательское форматирование, но его следует использовать по-другому: edittype:'custom', editoptions:{custom_element: editFmatter,....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...