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

时间:2016-01-24 06:13:16

标签: javascript php jquery checkbox jqgrid

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

功能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]');
},

1 个答案:

答案 0 :(得分:0)

在每个问题中包含哪个版本的jqGrid以及您使用的fork(free jqGridGuriddo 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属性的行。单击行上任何位置的方式与单击复选框的方式相同。

我会建议你考虑使用我在the answer中描述的另一种方式。它只是设置

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

查看另一个演示https://jsfiddle.net/OlegKi/4ga1ekh3/4/。它设置了禁用等级"关闭"行,如果单击选择列的列标题(选择所有功能),则会阻止选择行。