0

我正在尝试使用 jquery 来检测特定表(即“grid1”)中的复选框更改。

(FWIW - 该表是一个 jqgrid)

但是,我使用的“选择器”语句似乎没有按我预期的方式工作。

它不是检测特定表格(即“grid1”)中的复选框更改,而是检测/响应整个文档中的更改 - 包括“grid2”。

我的选择器显然做错了什么。——我只是不知道是什么。

感谢您对此的任何帮助:-)

仅供参考 - jquery“选择器”代码看起来像这样......

        $("#grid1 :checkbox")
        {
            $(this).change( function(e)
            {
                var t = $(e.target);   
                var row = t.closest("tbody").children().index(t.closest("tr"));
                var rowids = $('#grid1').jqGrid('getDataIDs');
                var rowid = rowids[row-1];
                var rowdata = $("#grid1").getRowData(rowid);
                $("#grid1").jqGrid('setRowData', rowid, rowdata); 
                $("#grid1").setSelection(rowid);                        
            });
        };  

...以及看起来像这样的 HTML 结构...

        <body>
            <form id="form1">
                <div>
                    <div>                    
                        <input type="submit" id="submit"  value="Submit Grid Edits" />
                    </div>
                    <div id="div1">
                        <table id="grid1"></table>
                        <div id="pager1" ></div>
                    </div>
                    <div id="div2">
                        <table id="grid2"></table>
                        <div id="pager2" ></div>
                    </div>                
                </div>
            </form>
        </body>

在不弄乱 UTF-8 字符串的情况下获取子字符串

我有一个来自 ajax 响应的 UTF-8 编码字符串,我想获取该字符串的子字符串直到第一个逗号。对于字符串"Привет, мир",它将是"Привет".

这会起作用并且不会遇到“多字节”问题吗?

var i = text.indexOf(',');
if (i != -1) text = text.substr(0, i);

还是更好用split

4

2 回答 2

1

我建议您"change"在 element 上绑定 event<table>而不是 usage $("#grid1 :checkbox").on("change", ...);。主要区别在于$("#grid1 :checkbox")表示复选框数组。并且绑定将在每个元素上设置单独的事件句柄。另一方面,如果您绑定change事件,则仅<table>设置一个事件句柄。由于事件冒泡,我们可以捕获"change"由子复选框触发的事件处理程序事件。这样可以节省注册每个句柄所需的一点内存,但是您的代码仍然非常简单。请参阅讨论密切问题的旧答案。

该演示演示了该方法。事件句柄看起来如此

$("#grid1").change(function (e) {
    var $td = $(e.target).closest("td"),     // the cell
        $tr = $td.closest("tr.jqgrow"),      // the row
        rowid = $tr.attr("id"),
        iCol = $.jgrid.getCellIndex($td[0]), // column index
        colModel = $(this).jqGrid("getGridParam", "colModel");

    // verify that event fired in the column "closed"
    if (iCol >= 0 && colModel[iCol].name === "closed" &&
            e.target.nodeName.toUpperCase() === "INPUT") {
        alert("Chechbox in rowid=" + rowid + " clicked. It's " +
            ($(e.target).is(":checked") ? "checked" : "unchecked") + " now");
    }
});

它显示如下结果

在此处输入图像描述

于 2013-05-24T16:58:30.253 回答
1

为什么不做这样的事情:

    $("#grid1 :checkbox").on("change", function(e) {
        //do stuff
    });

jsfiddle

编辑:

正如@sairn 和@Oleg 提到的,这会更合适:

$("#grid1").on("change", ":checkbox", function() {
    //do stuff
});
于 2013-05-24T15:40:17.023 回答