1

私はしばらくjqgridを使用しています。行を選択するとエラーが発生します。

> Uncaught TypeError: Cannot call method 'indexOf' of undefined
> jquery.jqGrid.src.js:2465 $.jgrid.extend.setSelection
> jquery.jqGrid.src.js:2465 jQuery.extend.each jquery-1.7.1.js:658
> jQuery.fn.jQuery.each jquery-1.7.1.js:271 $.jgrid.extend.setSelection
> jquery.jqGrid.src.js:2460 $.fn.jqGrid jquery.jqGrid.src.js:587
> $.fn.jqGrid.each.$.before.click.bind.ts.p.datatype
> jquery.jqGrid.src.js:2235 jQuery.event.dispatch jquery-1.7.1.js:3256
> jQuery.event.add.elemData.handle.eventHandle

私のグリッド定義はここにあります:

var sql4 = 'select id_num, est_number, customer, product, rev, w, l, fw, fl, expr1009, status, comments from schema.table where customer = "' + customer + '" and est_number = "' + est_num + '"';
$("#the_table").jqGrid({
    url:'thescript.php?sql=' + sql4,
    height: 300,
    shrinkToFit: true,
    width: 650,
    datatype: 'xml',
    mtype: 'POST',
    colNames:["ID","Estimate","Customer","Product","Rev","W","L","FW","FL","Expr1009","Status","Comments"],
    colModel:[
        {name:"id_num",index:"id_num",width:"10"},
        {name:"est_number",index:"est_number",width:"10"},
        {name:"customer",index:"customer",width:"10"},
        {name:"product",index:"product",width:"10"},
        {name:"rev",index:"rev",width:"10"},
        {name:"w",index:"w",width:"10"},
        {name:"l",index:"l",width:"10"},
        {name:"fw",index:"fw",width:"10"},
        {name:"fl",index:"fl",width:"10"},
        {name:"expr1009",index:"expr1009",width:"10"},
        {name:"status",index:"status",width:"10"},
        {name:"comments",index:"comments",width:"10"}
    ],
    rowNum:10000,
    sortname: 'id_num',
    sortorder: 'asc',
    viewrecords: true,
    gridview: true,
    caption: '',
    ondblClickRow: function(id){
        //do some stuff here
    }
})
.jqGrid('filterToolbar')
.trigger('reloadGrid');

}

それ以外の場合はグリッドが正常に機能しているように見えるため、問題が何であるかを理解できません。

次の jqgrid 関数では、行ごとに id = 1 であることに気付きました (この情報は変数ptに含まれています。

setSelection : function(selection,onsr) {
    return this.each(function(){
        var $t = this, stat,pt, ner, ia, tpsr;
        if(selection === undefined) { return; }
        onsr = onsr === false ? false : true;
        pt=$t.rows.namedItem(selection+"");

次の行は、エラーが発生した場所です。変数ptには、すべて id: 1 を持つ 4 つのノードがあります。

if(!pt || pt.className.indexOf( 'ui-state-disabled' ) > -1 ) { return; }

**アムスワー**

のフィールドにkey:trueオプションを追加しました。グリッドの各行の ID が同じであるため、問題が発生していました。一意の ID を持っていない場合に最も頻繁にエラーが発生すると思います。あなたのグリッドで。id_numColModel

4

1 に答える 1

3

なんらかの方法でencodeURIComponentを使用する必要があると思います。

url: 'thescript.php?sql=' + encodeURIComponent(sql4)

それ以外の

url: 'thescript.php?sql=' + sql4

おそらく、sqlパラメータをURLの一部としてではなく、POSTデータの内部に送信する必要があります。使用する必要がある場合

url: 'thescript.php',
postData: {
    sql: function () {
        return 'select id_num, est_number, customer, product, rev, w, l, fw, fl,' +
            ' expr1009, status, comments from schema.table where customer = "' +
            customer + '" and est_number = "' + est_num + '"';
    }
}

更新:エラーはのコードsetSelectionにあります。です。pt.className_ 非常に奇妙ですが、グリッドに重複undefinedがないことを検証できます。id

于 2012-06-01T15:08:47.433 に答える