【问题标题】:How to check jqgrid checkbox by option outside the grid如何通过网格外的选项检查jqgrid复选框
【发布时间】:2016-02-22 14:48:25
【问题描述】:

我有一个带有复选框作为前导列的 jqgrid。我需要能够使用网格之外的选项组来检查所有取消检查所有检查一些

<input id="rblAll" type="radio" name="rblOptStatus" value="All"/>Check All
<input id="rblNone" type="radio" name="rblOptStatus" value="None"/>Uncheck All
<input id="rblSome" type="radio" name="rblOptStatus" value="Some"/>Check 60%
<input id="rblReset" type="radio" name="rblOptStatus" value="Reset"  checked="checked" />Reset

所以我的网格是 loadOnce: true 而 multiselect 是 false。列模型是

colModel: [
        { name: 'ab', index: 'ab', width: 50, sortable: true, search: false, align: 'center', editable: true, formatter: 'checkbox', formatoptions: { disabled: false }, edittype: 'checkbox', editoptions: { value: 'True:False' } },

这是我尝试使用的代码,但未设置复选框。

$("input[name=rblOptStatus]").change(function () {
    var OptStatus = $("input[name=rblOptStatus]:checked").val()
    if (OptStatus == 'All') {
        var rows = jQuery("#grdOptionsGrid").getDataIDs();
        for (a = 0; a < rows.length; a++) {
            var q = jQuery("#grdOptionsGrid").jqGrid('getCell', rows[a], 'ab'); // displays true, for a checked record.
            if (q == 'False') {
                //MsgBox(q);
                //jQuery("#grdOptionsGrid").jqGrid('getCell', rows[a], 'ab').prop('checked', true);
                $(this).prop('checked', 'True')
            }
        }

那么我应该如何遍历网格然后选中/取消选中行复选框。

感谢您的帮助

【问题讨论】:

    标签: jqgrid jqgrid-asp.net jqgrid-formatter


    【解决方案1】:

    您应该使用getGridRowById 来获取行的DOM 元素(&lt;tr&gt;)。方法getCell 获取(文本),您不能使用.prop('checked', true) 来检查复选框。固定代码可能像

    $("input[name=rblOptStatus]").change(function () {
        var status = $("input[name=rblOptStatus]:checked").val(),
            $grid = $("#grdOptionsGrid"),
            ids = $grid.jqGrid("getDataIDs"),
            setCheckboxes = function (maxIndex, value) {
                var i, $checkbox;
                for (i = 0; i < maxIndex; i++) {
                    $checkbox = $($grid.jqGrid('getGridRowById', ids[i]))
                            .children('td[aria-describedby="grdOptionsGrid_ab"]')
                            .find('input');
                    if ($checkbox.is(":checked") !== value) {
                        $checkbox.prop('checked', value);
                    }
                }
            };
        switch (status) {
            case 'All':
                setCheckboxes(ids.length, true);
                break;
            case 'None':
                setCheckboxes(ids.length, false);
                break;
            default: //Check 60%
                setCheckboxes(ids.length, false);
                setCheckboxes(ids.length*0.6, true);
        }
    });
    

    https://jsfiddle.net/OlegKi/ef6zp25g/

    【讨论】:

    • Oleg,我收到以下错误 jqGrid - 没有这样的方法:getGridRowById。这是什么版本的?
    • @TomS:您使用哪个版本以及来自哪个分支(free jqGridGuriddo jqGrid JS 或版本 我在演示中使用过免费的 jqGrid 4.13.0。 Free jqGrid 是我在更改许可协议后于 2014 年底开始开发的 jqGrid 的分支,使其商业化并将the main fork 重命名为 Guriddo jqGrid JS。我在相同的旧 MIT/GPLv2 许可证下提供免费的 jqGrid(请参阅the readme)。
    • @TomS:方法getGridRowById已经存在于2013年发布的4.5.3版本中。如果您使用更旧的版本(一些复古版本),那么您可以使用$grid.jqGrid('getInd', rowid, true)而不是$grid.jqGrid('getGridRowById', ids[i]) ,但我强烈建议您升级到更新的版本。
    • 我正在使用 jqGrid 4.4.0 - jQuery Grid,我收到此方法不存在的错误。
    • @TomS:jqGrid 4.4.0 发布于 4 年前,非常适合 Web 开发。例如,它包括测试它的复古 jQuery 版本 1.4.3。它与当前版本的 Web 浏览器和当前版本的 jQuery、jQuery UI 存在很多兼容性问题...正如我所写的,您可以使用 getInd 而不是 getGridRowById,但我强烈建议您将 jqGrid 升级到免费的 jqGrid 4.13.0 和最新版本的 jQuery 和 jQuery UI CSS 或 Bootsrtap CSS。
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多