Вызов функции из кнопки, созданной во время события jqGrid gridComplete?

Я пытаюсь вызвать функцию в событии onclick кнопки, созданной во время события gridComplete.. Загружается ОК… вот как выглядит отображаемый html для кнопки в первой строке

<input type="button" onclick="deleteRow(9197113);" value="Delete" style="height: 22px; width: 70px;">

но когда я нажимаю кнопку ... функция не вызывается, а firebug говорит ....

deleteRow не определен

Как я могу вызвать функцию вместо встроенного javascript (который действительно работает, кстати, но я хотел бы вызвать функцию для удобства чтения и обслуживания). Я включил рабочий встроенный javascript... он закомментирован в приведенном ниже фрагменте...

Ниже представлена ​​сетка Complete в настройках jqGrid.

jQuery("#list").jqGrid({

   ........................

    gridComplete: function() {
        var ids = jQuery("#list").jqGrid('getDataIDs');
        for (var i = 0; i < ids.length; i++) {
            var cl = ids[i];
            de = "<input style='height:22px;width:70px;' type='button' value='Delete' onclick='deleteRow('" + cl + "' );' />";   
            //de = "<input style='height:22px;width:70px;' type='button' value='Delete' onclick=\"jQuery('#list').jqGrid('delGridRow', '" + cl + "', {msg: 'Delete this entry?'});\" />"; 
            jQuery("#list").jqGrid('setRowData', ids[i], { Delete: de });
        }
    }

   ........................

 });

Вот функция deleteRow()…

function deleteRow() {
    alert("hit delete button");
    // jQuery("#grid_id").jqGrid('delGridRow', row_id_s,options );
}

person w4ik    schedule 05.05.2010    source источник
comment
Где определяется deleteRow? Похоже, вы не называете это в правильном объеме.   -  person Zack    schedule 05.05.2010
comment
Он находится в том же файле javascript... прямо под файлом настройки jqGrid.   -  person w4ik    schedule 05.05.2010
comment
Когда вы говорите прямо ниже, это прямой потомок вашей готовой функции? Это просто прямой потомок блока <script>? Это объект JavaScript?   -  person Zack    schedule 05.05.2010
comment
Это буквально прямо под установочным материалом jqGrid... установочный материал jqGrid заканчивается, есть пустая строка, а следующая строка - это функция deleteRow...   -  person w4ik    schedule 05.05.2010


Ответы (2)


Я бы изменил вашу функцию завершения сетки, чтобы она давала вводу класс, скажем, «удалить», а затем в моей функции готовности документа настроила событие живого щелчка для этого селектора класса.

что-то вроде этого

gridComplete: function() {
    var ids = jQuery("#list").jqGrid('getDataIDs');
    for (var i = 0; i < ids.length; i++) {
        var cl = ids[i];
        de = '<input style="height:22px;width:70px;" type="button" class="delete" value="Delete" />';
        $("#list").jqGrid('setRowData', ids[i], { Delete: de });
    }
}

$('#list .delete').live('click',function(){
    var id = $(this).parent().attr('id');
});
person mcgrailm    schedule 05.05.2010
comment
Я попробую ваше предложение... просто нужно определить, как передать ему идентификатор строки... поскольку метод jqGrid delGridRow нуждается в идентификаторе строки jQuery(#grid_id).jqGrid('delGridRow', row_id_s,options); - person w4ik; 05.05.2010
comment
Потрясающий!!! событие живого клика сработало ... никогда не использовал его раньше, но приятно иметь возможность добавить его в свой набор трюков! - person w4ik; 05.05.2010

Вы можете определить deleteRow как пользовательскую функцию jQuery, а затем вызывать ее для выбранных элементов.

$.fn.deleteRow = function() { 
    row_id = $(this).attr('id');
    return $("#grid_id").jqGrid('delGridRow', row_id);
}

Назовите это так:

$("#grid_id button[value=Delete]").click( function() {
    $(this).parents('.row_class').deleteRow();
});

Я полагаю, что это должно быть более сложно - я не знаком с jqGrid, но то, что вам нужно сделать, довольно просто.


Не могли бы вы опубликовать разметку? Трудно сказать, как выбрать строку по идентификатору, не видя ее.

person Zack    schedule 05.05.2010
comment
Я попробую ваше предложение... просто нужно определить, как передать ему идентификатор строки... поскольку метод jqGrid delGridRow нуждается в идентификаторе строки jQuery(#grid_id).jqGrid('delGridRow', row_id_s,options); - person w4ik; 05.05.2010
comment
Хорошо, вы можете изменить return $(this).doWhatsNeededHere;, как я сделал выше, внося коррективы в соответствии с вашими потребностями. - person Zack; 05.05.2010