9

私はjqgridが初めてです。タブキーが押されたときに新しい行を挿入する次のコードがあります。それはほとんどの部分で機能します。ただし、新しい行が挿入されると、最初の列ではなく、その行の 2 番目の列にフォーカスが与えられます。

この問題を解決するにはどうすればよいですか??

HTML:

 <table  id="list11"></table>
 <!--<div id="paddtree"></div>-->
 <label>press tab to add new row</label>
<script>
    var selIRow = 1;
        var lastsel2
        jQuery("#list11").jqGrid({
    // url:'d/${jobId}.htm',
            datatype: "json",
            colNames: ['First Name', 'Email ID', 'Phone Number'],
            colModel: [
                // {name:'id',index:'id', width:75, search:true, stype:'text' , search:true, sortable:true},
                {name: 'firstName', width: 180, search: true, stype: 'text', sortable: true, editable: true, },
                {name: 'email', index: 'email', width: 250, editable: true},
                {name: 'phoneNumber', index: 'phoneNumber', width: 100, align: "right", editable: true,
                    editoptions: {
                        dataInit: function(elem) {
                            $(elem).focus(function() {
                                this.select();
                            })
                        },
                        dataEvents: [
                            {
                                type: 'keydown',
                                fn: function(e) {
                                    var key = e.charCode || e.keyCode;
                                    if (key == 9 || key == 15)//tab
                                    {
                                        var grid = $('#list11');
                                        //Save editing for current row
                                        grid.jqGrid('saveRow', selIRow, false, 'clientArray');
                                        //If at bottom of grid, create new row
                                        // alert(grid.getDataIDs().length);
                                        if (selIRow++ == grid.getDataIDs().length) {

                                            grid.addRowData(selIRow, {});
                                        }
                                        //Enter edit row for next row in grid
                                        grid.jqGrid('editRow', selIRow, true, 'clientArray');

                                    }
                                }
                            }
                        ]
                    }, },
            ],
            beforeRequest: function(data) {
                var grid = $('#list11');

                grid.addRowData(grid.jqGrid('getGridParam', 'records') + 1, {});
                grid.jqGrid('editRow', selIRow, false, 'clientArray');


            },
            onSelectRow: function(id) {
                if (id && id !== lastsel2) {

                    jQuery('#list11').jqGrid('restoreRow', lastsel2);
                    jQuery('#list11').jqGrid('editRow', id, true);
                    lastsel2 = id;
                }
            },
            // editurl: "data/add.htm",
            sortname: 'id',
            viewrecords: true,
            sortorder: "desc",
    caption: "Candidates applied for <bold> ${job.getTitle()}</bold>",
            // pager : "#paddtree",
            emptyrecords: "new",
        });
</script>

ありがとう。

4

3 に答える 3

1

コードに必要なのは、次の行を追加することだけe.preventDefault();です。

if (key == 9 || key == 15)//tab
{
    e.preventDefault();
    ...
于 2014-08-10T15:19:24.940 に答える
0

を使用しe.preventDefult();ます。これにより、クリック時に新しいタブを開くなどの事前定義されたアクションが防止されます....

あるいは

個人的には jgrid を使用していませんが、構文は jQuery データテーブルと同じです。非常に柔軟で、素晴らしいドキュメントがありますので、それを見てください。

于 2014-08-04T21:45:35.337 に答える
0

e.preventDefault() を使用すると、例が機能します。

if (key == 9 || key == 15) //tab
{
    e.preventDefault();
    //do your other stuff...
于 2013-06-19T23:54:25.337 に答える