jQgrid:禁用复选框单击,仅在单击复选框时选中复选框


jQgrid: Disable checkbox click and select checkbox only when checkbox is clicked

我正在使用多选选项的jqgrid。我必须实现两种不同的功能。

功能 1: 我必须禁用复选框取决于某些条件。为此,我在 beforrowselect 事件中使用以下代码块。

beforeSelectRow: function(rowid, e) {
    if( $("#jqg_TableId_"+rowid).attr("disabled") ){
        return false;
    }
    return true; 
}

该功能在此代码块中运行良好。

功能2:但问题是当我单击行中的任何位置时,复选框被选中,但复选框值不正确。当我在复选框区域内单击时,复选框的值是准确的。为此,我想限制用户精确单击复选框区域以单击复选框。为此,我正在使用下面提到的代码块。

beforeSelectRow: function(rowid, e) { 
   return $(e.target).is('input[type=checkbox]');
},

如果我单独使用任何一个块,那么它对于该功能工作正常。我需要实现两个功能,但两个块返回值。无法同时返回这两个条件的值。请帮助我如何实现这两个功能。

下面是我必须实现的完整代码。

beforeSelectRow: function(rowid, e) { 
    if( $("#jqg_TableId_"+rowid).attr("disabled") ){
        return false;
    }
    return true; 
}
 return $(e.target).is('input[type=checkbox]');
},

在每个问题中都包含您使用哪个版本的 jqGrid 和哪个分支(免费的 jqGrid、Guriddo jqGrid JS 或版本 <=4.7 中的旧 jqGrid)非常重要。我想你描述的问题存在,因为你使用了一些旧版本的jqGrid。

演示 https://jsfiddle.net/OlegKi/4ga1ekh3/3/使用免费的 jqGrid 4.12.1(它是 jqGrid 的分支,我开发了一年以上)和以下代码

beforeSelectRow: function (rowid, e) {
    var item = $(this).jqGrid("getLocalRow", rowid);
    if (item.closed) {
        return false;
    }
    return true; 
}

拒绝选择具有closed: true属性的行。单击行上任何位置的工作方式与单击复选框的方式相同。

我建议您考虑使用我在答案中描述的另一种方式。它设置只是

rowattr: function (rd) {
    if (rd.closed) {
        return {
            "class": "ui-state-disabled ui-jqgrid-disablePointerEvents"
        };
    }
}

请参阅另一个演示 https://jsfiddle.net/OlegKi/4ga1ekh3/4/。它在"关闭"行上设置了禁用类,这会阻止在单击选择列的列标题时选择行(全选功能)。