【问题标题】:Call a function from a button that is created during jqGrid's gridComplete event?从 jqGrid 的 gridComplete 事件期间创建的按钮调用函数?
【发布时间】:2026-01-12 21:00:01
【问题描述】:

我正在尝试在 gridComplete 事件期间创建的按钮的 onclick 事件中调用一个函数。加载正常...这是第一行中的按钮呈现的 html 的样子

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

但是当我点击按钮时......该函数没有被调用并且萤火虫说......。

deleteRow 未定义

我如何调用函数,而不是使用内联 javascript,,,(顺便说一句,它确实有效,但我想调用该函数以提高可读性和可维护性)。我已经包含了有效的内联 javascript...它在下面的 sn-p 中被注释掉了...

下面是 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 );
}

【问题讨论】:

  • deleteRow 在哪里定义?听起来您没有在正确的范围内调用它。
  • 它在同一个 javascript 文件中...就在 jqGrid 设置内容的下方
  • 当你在下面说的时候,它是你准备好的函数的直接孩子吗?它只是 &lt;script&gt; 块的直接子代吗?它在 JavaScript 对象中吗?
  • 它就在 jqGrid 设置内容的正下方...jqGrid 设置内容结束,有一个空行,下一行是 deleteRow 函数...

标签: jquery jqgrid


【解决方案1】:

我会更改您的网格完成功能,以便它为输入提供一个说“删除”的类,然后在我的文档就绪功能中为该类选择器设置一个实时点击事件。

类似的东西

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');
});

【讨论】:

  • 我会尝试你的建议...只需要确定如何为其提供行 ID...因为 jqGrid 的 delGridRow 方法需要行 ID jQuery("#grid_id").jqGrid(' delGridRow', row_id_s,options );
  • 太棒了!!!实时点击事件有效......以前从未使用过它,但能够将它添加到我的技巧包中真是太好了!
【解决方案2】:

您可以将 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,但你需要做的很简单。


你能张贴一些标记吗?不看就很难知道如何通过 ID 选择行。

【讨论】:

  • 我会尝试你的建议...只需要确定如何为其提供行 ID...因为 jqGrid 的 delGridRow 方法需要行 ID jQuery("#grid_id").jqGrid(' delGridRow', row_id_s,options );
  • 好的,你需要像我上面所做的那样更改return $(this).doWhatsNeededHere;,根据你的需要进行调整。