【问题标题】:prettyCheckable on jqGrid doesn't workjqGrid 上的 prettyCheckable 不起作用
【发布时间】:2013-06-13 05:33:18
【问题描述】:

我有一个带有多选复选框的 jqGrid 表(将表转换为网格)。 为了自定义复选框样式,我使用了 prettyCheckable,它生成了一个标签和一个锚(href)以及用于复选框输入的 div 容器(被标签和 a 隐藏和覆盖)。我的问题是,当我检查标签不起作用时,而不是当我检查输入时。

<div class="clearfix prettycheckbox labelright  blue " id="aui_11140">
    <input role="checkbox" id="rs" class="cbx" type="checkbox" style="display: none;">
    <label for="rs" class="checked" id="aui_11139">
    </label>
</div>

为输入设置 prettyCheckable:

$("input[type=checkbox]").change(function() {
        $(this).triggerHandler("click");
    }).prettyCheckable();

这是我的 jqGrid 设置:

$(document).ready(function() {
     $('#searchForm').ajaxForm(function() {
        var _data = $('#searchForm').serialize();
        $('#ResultsTable').jqGrid().setGridParam({url: '${searchUrl}' + _data}).trigger("reloadGrid")
        return true;
    });
    jsonTable('ResultsTable', 'ResultsPager', '${searchUrl}', 'searchForm',
        {id: 'code'},
        ['Code', 'Description', 'CF'],
        [{name: 'code', index: 'code', width: 55},
        {name: 'description', index: 'description', width: 90},
        {name: 'CF', index: 'CF', width: 80},
        function(id) {
            var selRows = $(this).jqGrid('getGridParam', 'selarrrow');
            $('#edit').toggle(selRows.length == 1);
            $('#delete').toggle(selRows.length > 0);
            $('#editForm #code').val(selRows);
            $('#deleteForm #code').val(selRows);
        },
        function(aSel, selected) {
            $('#edit').toggle(false);
            $('#delete').toggle(selected);
            if (selected) {
                $('#editForm #code').val(selRows);
                $('#deleteForm #code').val(selRows);
            }
        },
        true
    )      
});

为什么这不起作用?

ps。我已经编辑了 prettyCheckable.js 并删除了 &lt;a&gt; 因此没有生成。我将 css 从 .prettycheckbox a {} 重命名为 .prettycheckbox label {}

【问题讨论】:

    标签: jquery html css checkbox jqgrid


    【解决方案1】:

    插件prettyCheckable 使用类似代码

    input.prop('checked', true).change();
    

    将状态的更改转发到复选框。另一方面,jqGrid 仅包含click 事件句柄(参见the line)。

    你可以做的是在change事件的情况下触发click事件。

    例如,让我们有id="list" 的网格。然后选择所有项目的复选框的id 将是cb_list(“cb_”附加网格ID)。所以你可能使用像

    这样的代码
    $("#cb_list").prettyCheckable();
    

    建议你把代码改成下面这样

    $("#cb_list").change(function() {
        $(this).triggerHandler("click");
    }).prettyCheckable();
    

    它应该可以解决您的问题。

    【讨论】:

    • @Fuiba:不客气!抱歉,但我不明白您在“第一个输入”下的意思以及您的意思是哪种复选框样式。你能更清楚地描述你的问题吗?您没有包含用于prettyCheckable 的代码。您更改了哪些复选框?您的屏幕短片仅包含多选列的列标题中的 chechbox。您对复选框或另一个复选框有问题吗?
    • @Fuiba:你的意思是你需要为多选列的每个复选框使用prettyCheckable吗?我不知道您使用哪个代码来执行此操作,但我担心您会遇到其他问题。如果您使用loadComplete: function () {$(this).find("input.cbox").prettyCheckable();},那么您将拥有所有的复选框,但您必须编写额外的代码才能使所有在 jqGrid 中工作。
    • @Fuiba:我之前给你写过prettyCheckable 用于all 复选框需要你编写许多额外的代码。您必须实现 onSelectAllonSelectRow 来选择复选框。 prettyCheckable.jsalabel 上绑定 click 但如果 jqGrid 设置复选框的状态(由 隐藏)not 控制状态隐藏复选框的更改。我写信告诉你,你可能需要编写很多代码才能在 jqGrid 中完全实现 prettyCheckable
    • @Fuiba:例如onSelectRow: function (rowid) { $("#jqg_" + $.jgrid.jqID(this.id + "_" + rowid)).next("a").toggleClass('checked'); } 可能是必需的,或者可能是更复杂的代码。以同样的方式,您将需要实现 onSelectAll,它可以从 prettyCheckable 的 &lt;a&gt; 部分添加或删除 checked 类。
    • @Fuiba:我想知道为什么你对 id 使用如此奇怪的值。您使用$('#&lt;portlet:namespace/&gt;edit')document.getElementById('&lt;portlet:namespace/&gt;edited')。这意味着你真的有 id="edited" 吗?是这样吗?我认为这些名称与 HTML 中的 id 不正确。为什么你使用如此疯狂的 ID?顺便说一句,$('#&lt;portlet:namespace/&gt;edit') 的表达式将是错误的,如果 id="&lt;portlet:namespace/&gt;edited".
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多