当顶部复选框被选中时,jqGrid多选只会提供ID?

3

我有一个multiselect:true的jqGrid。在按钮的click事件中,我尝试检索id,如下所示:

var ids = $('#myGrid').jqGrid('getGridParam', 'selarrrow');

然而,仅当我在标题中选择顶部复选框时,才会将ids填充为某些内容。如果我不选择标题中的复选框,而是选择列中的多个复选框,则ids中没有选定的id。如何解决这个问题?
根据此示例,sellarrow已正确编写:http://www.trirand.com/blog/jqgrid/jqgrid.html,选择高级,多选示例。

3
你有没有注意到你拼错了 selarrow 这个单词? - Craig Stuntz
我也这么想,但当我尝试后,什么都不起作用了。此外,我觉得很奇怪的是,即使拼错了,顶部复选框仍然有效。 - Nyla Pareska
@Craig Stuntz:实际上,它是selarrrow。我猜这来自于“SELected ARRay ROWs”(选定数组行):http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options&s[]=selarrrow - Mariano Desanze
5个回答

2
原来是一个默认设置错误,导致出现了以下设置:
beforeSelectRow: function(rowid, e) { return false; },

将其设置为true使我恢复了控制力。

2

在jqGrid中添加beforeSelectRow:取消行点击选择的属性。以下是函数定义。它可以完美地工作。

function cancelRowClickSelection(rowid, e) 
{
 var target=e.originalTarget;
 var str=target.innerHTML;
 if(target.classList!=null && target.classList!="undefined" && target.classList[0]!=null && target.classList[0]!="undefined")
 {
  if(target.classList[0]=="cbox")
  {
   return true;
  }
 }
 if(str.indexOf("input")!=-1 || str.indexOf("INPUT")!=-1)
 {
  return true;
 }
 return false; 
}

1

我尝试了几个解决方案,但都没有成功。

最终我只是找到了数据值...

完整的独立示例...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <link type="text/css" rel="stylesheet" media="screen" href="jqGrid4/css/redmond/jquery-ui-1.8.13.custom.css" />
    <link type="text/css" rel="stylesheet" media="screen" href="jqGrid4/css/ui.jqgrid.css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
    <script type="text/javascript" src="jqGrid4/js/i18n/grid.locale-en.js"></script>
    <script type="text/javascript" src="jqGrid4/js/jquery.jqGrid.min.js"></script>
</head>
<body>

<form id="gridFIRST" action="A" method="post">
    <input id="gridFIRST_thinglist" name="gridFIRST[thinglist]" type="hidden" value="">
    <input id="gridFIRST_X"  name="gridFIRST[do_X]" type="submit" value="Let Out 0">
</form>
<form id="gridSECOND" action="B" method="post">
    <input id="gridSECOND_thinglist"  name="gridSECOND[thinglist]" type="hidden" value="">
    <input id="gridSECOND_Y" name="gridSECOND[do_Y]" type="submit" value="Bring In 0">
</form>
<table summary="grid" id="thisJqGrid"></table>
<div id="thisJqGridPager"></div>


<script>
function selectedThingsClass()
    {
    this.list = new Array();
    this.dpush = function(thing) { if(this.list.indexOf(thing) == -1) /* if unique */ this.list.push(thing); }
    this.dpop = function (thing) { var n = this.list.indexOf(thing); if(n >= 0) this.list.splice(n, 1); }
    this.getCount = function () { return 0+this.list.length; }
    this.thingSelected = function (isChecked,thing) { if(isChecked) this.dpush(thing); else this.dpop(thing); }
    }

function handleSelectedRow(thing) {
    var jqgcell     = jQuery('#thisJqGrid').getCell(thing, 0);
    var petName     = jQuery('#thisJqGrid').getCell(thing, 'COL2');
    var cbIsChecked = (jQuery(jqgcell).attr('checked') == 'checked') ? true : false;
    switch(petName)
        {
        case 'Dog':
            selectedThingsCat.thingSelected(cbIsChecked,thing);
            jQuery('#gridSECOND_thinglist').val(selectedThingsCat.list.toString());
            jQuery('#gridSECOND_Y').val("Bring In "+selectedThingsCat.getCount());
            break;
        case 'Cat':
            selectedThingsDog.thingSelected(cbIsChecked,thing);
            jQuery('#gridFIRST_thinglist').val(selectedThingsDog.list.toString());
            jQuery('#gridFIRST_X').val("Let Out "+selectedThingsDog.getCount());
            break;
        }
    }

var selectedThingsDog = new selectedThingsClass();
var selectedThingsCat = new selectedThingsClass();

function index_handleSelectedRow(rowIndex)
    {
    // convert row-index to JSON-Data ID
    var rowDataArr = jQuery("#thisJqGrid").getRowData();
    handleSelectedRow(rowDataArr[rowIndex].COL1);
    }

var mydata = [
    {id:"thing01",COL1:"thing01",COL2:"Dog"},
    {id:"thing02",COL1:"thing02",COL2:"Cat"},
    {id:"thing03",COL1:"thing03",COL2:"Cat"},
    {id:"thing04",COL1:"thing04",COL2:"Dog"},
    {id:"thing05",COL1:"thing05",COL2:"Cat"},
    {id:"thing06",COL1:"thing06",COL2:"Dog"},
    {id:"thing07",COL1:"thing07",COL2:"Cat"},
    {id:"thing08",COL1:"thing08",COL2:"Cat"},
    {id:"thing09",COL1:"thing09",COL2:"Dog"},
    {id:"thing10",COL1:"thing10",COL2:"Dog"}
    ];

jQuery(document).ready(function($){
    jQuery("#thisJqGrid").jqGrid({
            onSelectAll: function(rowIdxArray, sts)
                { jQuery(rowIdxArray).each(function(rowIndex){ index_handleSelectedRow(rowIndex); } ); },
            onSelectRow: function(rowJsonId)
                { handleSelectedRow(rowJsonId); },
            multiselect: true,
            colNames:[ 'Thing','Pet' ],
            colModel: [ { name:'COL1', width:10 }, { name:'COL2', width:10 }, ],
            datatype: "local", data: mydata,
            width: "200", height: "100%",
            postData: { "oper":"grid" },
            toolbar: [true,"top"],
            rowNum:10,
            sortname: "COL1",
            sortorder: "asc",
        });
    });

</script>
</body>
</html>

1

如果我放置

$('#id ').getGridParam('selectarrow') 

而不是

$('# ').JQgrid('getGridParam','selectarrow')

它有效


1

我正在使用以下代码来检索随机选择的行,它运行良好...

var selArr = $("#my_grid").getGridParam("selarrrow");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接