jquery - jqGrid 上的 prettyCheckable 不起作用

标签 jquery html css checkbox jqgrid

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

Label checked

Input checked

<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
    )      
});

为什么这不起作用?

附言。我编辑了 prettyCheckable.js 并删除了 <a>因此不会生成。我从 .prettycheckbox a {} 重命名了 css至 .prettycheckbox label {} .

最佳答案

插件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();

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

关于jquery - jqGrid 上的 prettyCheckable 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17144547/

相关文章:

jquery - Ajax 请求包含无效字符

javascript - 在组件外部设置组件状态会导致错误

html - 在 CSS 中使用 Flexbox/Grid,使图像在移动设备上堆叠

html - 如何使 flexbox 响应?

悬停时CSS按钮颜色仅更改单词背景颜色无孔按钮

javascript - JQuery 的事件和非事件复选框

jquery - 关闭所有其他窗口并保留当前的信息框谷歌地图

javascript - 我需要对 HTML 和 JavaScript 代码进行哪些更改才能使 character_count 正常工作?

javascript - Chrome 开发者工具 |呈现为 HTML 时预览 Pane 中的滚动问题

html - Bootstrap 向左浮动和向右浮动