【问题标题】:jqGrid - how to pass both the boolean checked state value and the actual unique value to a checkbox in jqGrid?jqGrid - 如何将布尔检查状态值和实际唯一值传递给 jqGrid 中的复选框?
【发布时间】:2012-06-14 16:08:11
【问题描述】:

我有一个带有多个 jqGrid 实例的 JSP 页面。该网格的一列具有表示该行是否被选中的复选框。我需要在 jqGrid 中有一个类似 HTML 的普通复选框 - 一个同时具有选中/未选中布尔状态和实际唯一值的复选框,例如:
<input type="checkbox" name="vehicle" value="Car" checked="checked" />

在 jqGrid 中,我面临一个限制,我只能将一个值传递给复选框。在 jqGrid 的 colModel 我有这个:

colModel:[
    {name:'assign', index:'assign', width:200, editable:true, edittype:'checkbox', formatter:"checkbox", formatoptions:{disabled : false}}
    ]

在将数据传递给我的 jqGrid 时,我有这种数据:

var mydata = [
              {assign:"${assignBool}"}
           ];

但是 colModel [] "assign" 中设置的值可以是布尔值 确定是否选中了复选框,或者它可能是我们要为复选框设置的实际值,以确定哪个复选框被选中。

在传递布尔值时,我可以在显示中正确检查复选框,但无法获取值(唯一标识值)。

在将实际唯一值传递给“分配”时,所有复选框都显示所有复选框的默认选中状态不正确。

我无法确定如何将选中状态布尔值和复选框的实际唯一值传递给 jqGrid 中的“分配”行。

我希望能够使用下面的代码遍历整个页面并获取所有复选框的实际唯一值:

$("#editBtn").click(function() {
    var val = [];
    var checkedNames = '';
    $('input:checkbox:checked').each(function(index) {
        val[index] = $(this).val() + ',';
        checkedNames += val[index];
        }
    );  
    alert("Checked check box values: " + checkedNames);
});

如果我将布尔检查状态传递给上面的“assign”,我在 checkedNames 变量中得到的只是 True/False 或 Yes/No 值的列表,而不是实际值。

有没有其他人遇到过类似的问题,或者有没有人可以解决这个问题?对我来说,这似乎是 jqGrid 的一个限制,或者我可能不知道 jqGrid 中有这样的功能。在这方面的任何帮助将不胜感激。

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我经常使用 jqGrid 来管理自定义行为的一件事是将我想要显示的 HTML 作为文本传递给 colModel。因此,不要使用上面列出的 edit 属性,只需将 HTML 作为文本从服务器的 JSON 响应中发送。

    jqGrid 会将其呈现为 HTML,然后您可以使用 jQuery 管理行为(看起来您很熟悉)。

    更新 例如,我想将jQuery Sparklines 集成到我的网格中,所以在我服务器上的控制器中(我使用的是 ASP.NET MVC),我返回:

    return Json(new
    {
        total = (int)Math.Ceiling((double)data.Count / rows),
        page = 1,
        records = data.Count,
        rows = (from item in data
                select new
                 {
                     id = "GR" + data.IndexOf(item),
                     cell = new object[] 
                     { 
                         item.Name,
                         "<span class=\"inlinesparkline\" values=\"" + item.SparklineData + "\"></span>"
                     }
                 }).ToArray()
            });
    

    在我的 jqGrid 中,此列在 colModel 中作为文本:

    ...
    colModel: [
        { name: 'Name', index: 'Name' },
        { name: 'Sparkline', index: 'Sparkline', classes: 'sparkcell' }
    ],
    ...
    

    现在在我的 gridComplete 中,我可以使用 jQuery 使用 .sparkcell 选择器来做任何我需要的事情:

    ...
    gridComplete: function () {
        $('.sparkcell').sparkline();
    },
    ...
    

    【讨论】:

    • 保罗,感谢您的建议。你能给出一个你提到的代码的sn-p吗?我得到了总体概念,但我不确定如何实际实施。
    • 谢谢保罗。似乎它应该工作。我将尝试根据我的要求定制一个类似的解决方案,看看它是否适合我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2017-02-04
    相关资源
    最近更新 更多