Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jqGrid 4,为什么在事件处理程序中未定义rowid?_Javascript_Jquery_Jqgrid - Fatal编程技术网

Javascript 使用jqGrid 4,为什么在事件处理程序中未定义rowid?

Javascript 使用jqGrid 4,为什么在事件处理程序中未定义rowid?,javascript,jquery,jqgrid,Javascript,Jquery,Jqgrid,我在一个独立的网格中使用jqGrid 4.1.2。我看到一个实例,其中事件处理程序接收到一个未定义的值作为rowid参数的值 这是我的初始化代码 $("#truckGrid").jqGrid({ url:'/handlers/TruckerCheckDataHandler.ashx', datatype: "json", colNames:['id','All','VIN', 'Plate', 'Make','Model','Year','RFID #','Descrip

我在一个独立的网格中使用jqGrid 4.1.2。我看到一个实例,其中事件处理程序接收到一个未定义的值作为rowid参数的值

这是我的初始化代码

$("#truckGrid").jqGrid({
    url:'/handlers/TruckerCheckDataHandler.ashx',
    datatype: "json",
    colNames:['id','All','VIN', 'Plate', 'Make','Model','Year','RFID #','Description'],
    colModel: [
        {name:'id', index: 'id', hidden:true},
        {name:'action',index:'action', width:25},
        {name:'vin',index:'vin', width:120},
        {name:'plate',index:'plate', width:75},
        {name:'make',index:'make', width:80},
        {name:'model',index:'model', width:80},     
        {name:'year',index:'year', width:40},       
        {name:'rfidNo',index:'rfidNo', width:50},
        {name: 'description', index: 'description', width: 100, sortable: false}                    
    ],
    hidegrid: false,
    jsonReader : {
        root: 'rows',
        repeatitems: false,
        id: 'id',
        page: 'page',
        total: 'total',
        records: 'records'
    },
    nav : {
        edittext: "Edit",
        edittitle: "Edit",
        addtext: "Add Truck",
        addtitle: "Add Truck",
        deltext: "Delete",
        deltitle: "Delete"
    },
    ondblClickRow: function (rowid, iRow, iCol, e) {
        alert(rowid);
    },
    rowNum:10,
    rowList:[10,20,30],
    pager: '#truckPager',
    sortname: 'vin',
    viewrecords: true,
    sortorder: "desc"
});
jQuery("#truckGrid").jqGrid('navGrid','#truckPager',{
    add: true, 
    addfunc: function() {

    },
    del:true, 
    delfunc: function (rowid) {
        alert(rowid);
    },
    editfunc: function (rowid) {
        alert(rowid);
    },
    edit: true, 
    clear:false
});
下面是将卡车数据实际添加到网格的代码

var _truckList = null;

function truckData (truckId, vin, make, model, year, country, state, plateNum, description, rfid, truckType) {
    return {
        id : truckId,
        vin : vin,
        make : make,
        model : model,
        year : year,
        plateCountry : country,
        plateState : state,
        plateNumber : plateNum,
        description : description,
        rfid : rfid,
        truckType : truckType,
        toJqGridData : function() {
            // [{"DATA_ID":"0", "DATA_DN": "national"}, {"DATA_ID":"1", "DATA_DN": "samsung"}]
                return [{"id":this.id, 'action': '', 'vin':this.vin, 
                    'plate':this.plateCountry + '-' + this.plateState + '-' + 
                    this.plateNumber, 'make':this.make, 'model':this.model, 
                    'year':this.year,'rfidNo':this.rfid, 
                    'description':this.description}]
        }
    };
}


function addTruckData() {
    var addTruck = true;
    var truckVin = $('#truckVin').val();
    if (truckVin.length == 0) {
        return null;
    }

    var rowId = -1;
    var method = '';

    var truck = new truckData (0, truckVin, 
        $('#truckMake').val(), 
        $('#truckModel').val(), 
        $('#truckYear').val(), 
        $('#country').val(), 
        $('#state').val(), 
        $('#truckPlateNumber').val(), 
        $('#truckDescription').val(), 
        $('#truckRfidNo').val(), 
        'OwnerOperator');

    if (_truckList != null) {
        for (var xx = 0; xx < _truckList.length; xx++ ) {
            if (_truckList[xx].vin == truckVin) {
                // The vin is already in the list, update it.
                rowId = xx + 1;
                break;
            }
        }
    }

    if (rowId == -1 && _truckList == null) {
        _truckList = [ truck ];
        rowId = 1;
        method = 'addRowData';
    }
    else if (rowId == -1) {
        rowId = _truckList.length + 1;
        _truckList.push (truck);
        method = 'addRowData';
    }
    else {
        _truckList[rowId - 1] = truck;
        method = 'setRowData';
    }

    var result = $('#truckGrid').jqGrid(method, rowId, truck.toJqGridData());

    if (!result) {
        alert('Operation failed.');
    }

    // resetTruckFields(); <- Resets the UI state by setting the text boxes to ''
    return truck;
}
我肯定我在这里做错了什么,但我不知道是什么。有什么想法吗

网格此时未连接到数据处理程序,并且未按预期进行任何调用。一切都是在java脚本中本地生成的

为了更清楚一点,addTruckData由附在按钮上的代码调用,如下所示:

$(document).ready(function () {
    $('#doIt').click(function () {
        if ($('form').valid()) {
            addTruckData();
        }
    });
});

您没有发布任何JSON数据,所以我尝试用一些虚拟数据重现您的问题。你怎么能从我身上看出没有成功。我的意思是,所有的工作没有任何问题。所以问题应该在代码的另一部分


此外,我将设置从jqGrid的nav参数(不存在)移动到navGrid的其他选项,并做了一些其他最小的更改。如果打开演示的源代码,您可以看到所有内容。

在我的头重重地撞在众所周知的墙上之后,我让它开始工作了。下面列出了与不工作的代码的差异

    $("#truckGrid").jqGrid({
        // url:resolveUrl('/handlers/TruckerCheckDataHandler.ashx'), <-- Removed because no actual server communication was being utilized.
        datatype: "clientSide", // <-- Should not have been "json", this was happening all client side
        colNames:['id','All','VIN', 'Plate', 'Make','Model','Year','RFID #','Description'],
        colModel: [
            {name:'id', index: 'id', hidden: true},
            {name:'action',index:'action', width:25},
            {name:'vin',index:'vin', width:120},
            {name:'plate',index:'plate', width:75},
            {name:'make',index:'make', width:80},
            {name:'model',index:'model', width:80},     
            {name:'year',index:'year', width:40},       
            {name:'rfidNo',index:'rfidNo', width:50},
            {name: 'description', index: 'description', width: 100, sortable: false}                    
        ],
        datatype: 'local',
        hidegrid: false,
        jsonReader : {
            // root: 'rows',
            repeatitems: false //,
            // id: 'id',
            // page: 'page',
            // total: 'total',
            // records: 'records'
        },
        multiselect : true,
        ondblClickRow: function (rowid) {
            editTruck(rowid);
        },
        rowNum:10,
        rowList:[10,20,30],
        pager: '#truckPager',
        sortname: 'vin',
        viewrecords: true,
        sortorder: "desc"
    });
    $("#truckGrid").jqGrid('navGrid', '#truckPager', {
        edittext: "Edit&nbsp;&nbsp;",
        edittitle: "Edit",
        addtext: "Add Truck&nbsp;&nbsp;",
        addtitle: "Add Truck",
        deltext: "Delete&nbsp;&nbsp;",
        deltitle: "Delete",
        addfunc: function () {
            alert('add');
        },
        delfunc: function (rowid) {
            alert(rowid);
        },
        editfunc: function (rowid) {
            alert(rowid);
        },
        //edit: true,
        clear: false
    });

在您发布的代码中,将使用但未定义变量或函数_ctrlId、truckData、truckType、truckList、result、resetTruckFields、resolveUrl、editTruck、removeTruck。要使用未定义的rowid参数ondblClickRow重现问题,您可以尝试减少代码,直到问题仍然存在。为了允许其他人重现您的问题,您需要额外发布从“/handlers/TruckerCheckDataHandler.ashx”返回的JSON数据。您可以获取有关的数据。我已从示例中删除了有问题的项。我注意到您没有尝试实现addTruckData方法。我也不是从网格中有任何数据的点开始。在这一点上,它是空的。我把你所有的变化都带进来了,问题仍然存在。现在,我正在关注$'truckGrid'。jqGridmethod,rowId,truck.toJqGridData@对不起,我不明白你的意思。我刚刚使用了你的代码:addfunc:function{}查看你问题中的代码。我无法使用addTruckData函数,因为它包含许多未定义的变量和类,如truckData。很抱歉,我添加了truckData函数。其他所有内容都应该支持addTruckData方法。@琥珀:变量结果和函数resetTruckFields仍然未定义。此外,还不清楚您使用哪个实现来实现addfunc。addTruckData返回类truckData的对象。truckData类的toJqGridData方法未定义。毕竟,我最不清楚的是为什么addfunc的代码对ondblClickRow很重要。只有在代码破坏了$'truckGrid'的一些重要结构的情况下,它才是重要的。结果缺少var,并且toJqGridData是在truckData类上定义的。addfunc目前为空,因为它尚未实现。
    $("#truckGrid").jqGrid({
        // url:resolveUrl('/handlers/TruckerCheckDataHandler.ashx'), <-- Removed because no actual server communication was being utilized.
        datatype: "clientSide", // <-- Should not have been "json", this was happening all client side
        colNames:['id','All','VIN', 'Plate', 'Make','Model','Year','RFID #','Description'],
        colModel: [
            {name:'id', index: 'id', hidden: true},
            {name:'action',index:'action', width:25},
            {name:'vin',index:'vin', width:120},
            {name:'plate',index:'plate', width:75},
            {name:'make',index:'make', width:80},
            {name:'model',index:'model', width:80},     
            {name:'year',index:'year', width:40},       
            {name:'rfidNo',index:'rfidNo', width:50},
            {name: 'description', index: 'description', width: 100, sortable: false}                    
        ],
        datatype: 'local',
        hidegrid: false,
        jsonReader : {
            // root: 'rows',
            repeatitems: false //,
            // id: 'id',
            // page: 'page',
            // total: 'total',
            // records: 'records'
        },
        multiselect : true,
        ondblClickRow: function (rowid) {
            editTruck(rowid);
        },
        rowNum:10,
        rowList:[10,20,30],
        pager: '#truckPager',
        sortname: 'vin',
        viewrecords: true,
        sortorder: "desc"
    });
    $("#truckGrid").jqGrid('navGrid', '#truckPager', {
        edittext: "Edit&nbsp;&nbsp;",
        edittitle: "Edit",
        addtext: "Add Truck&nbsp;&nbsp;",
        addtitle: "Add Truck",
        deltext: "Delete&nbsp;&nbsp;",
        deltitle: "Delete",
        addfunc: function () {
            alert('add');
        },
        delfunc: function (rowid) {
            alert(rowid);
        },
        editfunc: function (rowid) {
            alert(rowid);
        },
        //edit: true,
        clear: false
    });