【问题标题】:jqGrid Redirect (and not inline / form edit) when click on Edit icon单击编辑图标时 jqGrid 重定向(而不是内联/表单编辑)
【发布时间】:2014-11-21 09:45:51
【问题描述】:

我的 jqGrid 脚本:

<script type="text/javascript">

var delete_task_url = "/controller/deleteRecordAction";
var gr = jQuery("#grid").jqGrid('getGridParam','selrow');
jQuery("#grid").jqGrid({
    url:call_url,
        datatype: "json",
    height: 'auto',
    rowNum: 20,
    rowList: [20,30],
    colNames:['Task#','Project ID','Task Name', 'Start Date', 'End Date', 'Created By', 'Created Date', 'Status', 'Action'],
    colModel:[
        {name:'USER_ID',index:'TASK_ID', align:'center',search:false },
        {name:'USER_NAME',index:'TASK_NAME', search:false},
        {name:'ACTION',index:'link', search:false,align:'center',sortable:false, formatter: 'actions',
        formatoptions: {
            keys: true,
            editformbutton: true,
            delOptions: { url: delete_task_url}
        }},
    ],
    pager: "#page",
    shrinkToFit :true,
    autowidth: true,
    viewrecords: true,
    sortname: 'TASK_ID',
    caption: "Task List",
    gridComplete: function () {
                    var recs = $("#grid").getGridParam("records");
                    $( ".mycontent" ).remove();
                    if (recs == 0 || recs == null) {
                        $('#grid').after("<div class='mycontent' style='color:red;text-align:center'>No Record Found</div>");

                    }

                }
}).navGrid('#page',{ edit:false,add:false,del:true,search:false,cloneToTop:true,refresh:false},
            {

             },{
             //add options


             },{

                        //msg: "do you really want delete this keyword? This delete affect on Eqms filter"

                });
                jQuery("#grid").jqGrid('filterToolbar', { autosearch: true  });
            var topPagerDiv = $('#grid_toppager')[0]; 
            jQuery("#grid_toppager_center", topPagerDiv).remove();

</script>

上面的脚本给了我编辑和删除图标。删除操作按预期工作,但对于编辑,我既不希望 editformbutton: true 进行 form 编辑,也不希望 editformbutton: false 进行内联编辑。

当用户点击编辑图标时,它应该被重定向到自定义的URL

我怎样才能做到这一点?

谢谢。

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我觉得这个问题很有趣,所以我创建了the demo,它演示了相应的实现。

    Somme 符合代码。首先应该明白,formatter: "actions" 在带有编辑图标的 div 上设置 onclick 属性,其值为jQuery.fn.fmatter.rowactions.call(this,'formedit');jQuery.fn.fmatter.rowactions.call(this,'edit'); 取决于editformbutton 属性的值(请参阅the source code)。因此必须删除该属性(.prop("onclick", null) 的使用似乎最好的方式对应于the jQuery documentation)并绑定新的click 事件句柄,该事件句柄将新的URL 值分配给location.hrefgridComplete 的代码就是这样做的:

    gridComplete: function () {
        var $self = $(this), rows = this.rows, i, iAction, tr,
            colModel = $self.jqGrid("getGridParam", "colModel"),
            idPrefix = $self.jqGrid("getGridParam", "idPrefix"),
            newOnClick = function (e) {
                var rowid = $(this).closest(".jqgrow").attr("id");
                e.stopPropagation();
    
                // an example of redirection
                window.location.href = "http://www.google.com/#q=" +
                    encodeURIComponent($.jgrid.stripPref(idPrefix, rowid));
            };
    
        // find the index of the column with formatter: "actions"
        for (i = 0; i < colModel.length; i++) {
            if (colModel[i].formatter === "actions") {
                iAction = i;
                break;
            }
        }
        if (iAction === undefined) {
            return;
        }
        for (i = 0; i < rows.length; i++) {
            tr = rows[i];
            if ($(tr).hasClass("jqgrow")) {
                $(tr.cells[iAction]).find(".ui-inline-edit")
                    .click(newOnClick)      // register new click event handler
                    .prop("onclick", null); // remove standard behavior of Edit button
            }
        }
    }
    

    【讨论】:

    • 代码看起来不错,但循环只是将其重定向到URL。这可以缩短或更改或允许这样做的任何其他默认设置吗?
    • @Slimshadddyyy:对不起,我不明白你的问题。 click 事件处理程序 newOnClick 提供了重定向示例。 var rowid = $.jgrid.stripPref(idPrefix, rowid); 获取 rowid。作为示例,我将其附加到测试 URL。您可以使用$self.jqGrid("getRowData", rowid) 从行中获取任何其他数据。您可以使用$.param 来构造要附加到 URL 的数据。所以你只需要根据你的要求修改window.location.href = ...这一行。
    • 是的,URL 修改已完成,代码运行良好。我只是想知道代码长度。再次感谢。
    • @Slimshadddyyy:可以通过使用 jQuery 选择器将代码减少到具有“动作”格式化程序的列,但它会像我发布的代码一样缓慢工作。无论如何,我首先描述了应该做什么,然后发布了实现。
    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2012-10-09
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多