2016-01-24 219 views
0

我正在使用jqgrid使用multiselect选项。有两个不同的功能,我必须执行。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]'); 
}, 

回答

0

在每一个问题的jqGrid其中的和版本从叉(free jqGridGuriddo jqGrid JS或旧的jqGrid版本< = 4.7)使用包括这一点很重要。我想你描述的问题存在,因为你使用一些旧版本的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/。它在“关闭”行上设置禁用类,以防止在单击选择列的列标题(选择全部功能)时选择该行。

+0

beforeSelectRow中用于禁用复选框选择的块按预期工作,但rowattr事件不按照需求工作。整个行在返回“class”时禁用:“ui-state-disabled ui-jqgrid-disablePointerEvents”。只需点击复选框区域即可检查复选框。 – user2992704

+0

@ user2992704:是的,这是我的预期。设置行禁用可以一次完成两件事:向用户显示哪些行不能被选择2)通过选择所有行来解决问题。我们可以使用其他一些预定义的类:'ui-subgrid','jqgroup'或'jqfoot'。见https://jsfiddle.net/OlegKi/4ga1ekh3/5/-一个**必须结合**'rowattr'和'beforeSelectRow'。 – Oleg

相关问题