2013-05-03 18 views
9

Jestem nowy w jqgrid. Mam następujący kod, aby wstawić nowy wiersz po naciśnięciu klawisza tabulatora. Działa w większej części. Ale po wstawieniu nowego wiersza fokus zostaje podany drugiej kolumnie w tym wierszu zamiast pierwszej kolumnie.Jak przenieść kursor z drugiej kolumny do pierwszej kolumny w nowym wierszu w jqgrid

Jak rozwiązać ten problem?

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> 

Dzięki.

+2

Czy Próbowalismy e.stopPropagation() po ustawieniu nowy wiersz do edycji? nie jestem pewien, ale może to, co się dzieje, jest to, że zaczynasz edycję wiersza, fokus jest podany do pierwszego wejścia, ale wtedy zdarzenie propaguje i przekazuje fokus do następnego wejścia – cernunnos

+2

Mam wiele pytań do kodu, który wysłałeś. Pierwszy: jak wypełniasz siatkę (używasz 'datatype:" json "', więc powinny to być opcje 'url')? Nie zdefiniowałeś 'editurl'. W niektórych miejscach (ale nie wszędzie) określasz '' clientArray'' jako 'url'. Czy chcesz zmodyfikować dane tylko lokalnie? Co więcej, ustawiasz fokus w trzeciej kolumnie ("numer telefonu"), a ponadto w niewłaściwy sposób, ale napisałeś "fokus jest podany dla drugiej kolumny w tym wierszu zamiast pierwszej kolumny". Jakie zachowanie chcesz wdrożyć? – Oleg

+0

@Oleg Podałem zarówno 'URL' i' EDITURL' ale tylko tutaj skomentowałem to. –

Odpowiedz

0

Twój przykład działa, jeśli używasz e.preventDefault():

if (key == 9 || key == 15) //tab 
{ 
    e.preventDefault(); 
    //do your other stuff... 
0

Korzystając e.preventDefult();. Zapobiega to predefiniowane czynności, takich jak otwartej nowej karcie na kliknięcia ....

Alternatywnie

Osobiście nie był używany jgrid ale składnia jest taka sama z DataTables jQuery. Jest bardzo elastyczny i ma niesamowitą dokumentację.

1

Wszystko co musisz zrobić, aby kodzie jest dodać linię e.preventDefault(); tutaj:

if (key == 9 || key == 15)//tab 
{ 
    e.preventDefault(); 
    ... 
Powiązane problemy