2014-02-17 45 views
0

我使用修改過的cellEdit(完全上下左右單元格導航)獲得了JqGrid。JqGrid中的自動完成上下鍵控導航

這裏是jqgrid.src位:

   if (e.keyCode === 37) { 
        if(!$t.grid.hDiv.loading) { 
         {$($t).jqGrid("prevCell",iRow,iCol);} //left 
        } else { 
         return false; 
        } 
       } 
       if (e.keyCode === 39) { 
        if(!$t.grid.hDiv.loading) { 
         {$($t).jqGrid("nextCell",iRow,iCol);} //right 
        } else { 
         return false; 
        } 
       } 
       if (e.keyCode === 38) { 
        if(!$t.grid.hDiv.loading) { 
         {$($t).jqGrid("prevRow",iRow,iCol);} //up 
        } else { 
         return false; 
        } 
       } 
       if (e.keyCode === 40) { 
        if(!$t.grid.hDiv.loading) { 
         {$($t).jqGrid("nextRow",iRow,iCol);} //down 

        } else { 
         return false; 
        } 
       } 

和其他

nextCell : function (iRow,iCol) { 
    return this.each(function(){ 
     var $t = this, nCol=false, i; 
     if (!$t.grid || $t.p.cellEdit !== true) {return;} 
     // try to find next editable cell 
     for (i=iCol+1; i<$t.p.colModel.length; i++) { 
      if ($t.p.colModel[i].editable ===true && $t.p.colModel[i].hidden !== true) { 
       //alert($t.p.colModel[i-1].hidden); 
       nCol = i; break; 
      } 
     } 
     if(nCol !== false) { 
      $($t).jqGrid("editCell",iRow,nCol,true); 
     } else { 
      if ($t.p.savedRow.length >0) { 
       $($t).jqGrid("saveCell",iRow,iCol); 
      } 
     } 
    }); 
}, 
prevCell : function (iRow,iCol) { 
    return this.each(function(){ 
     var $t = this, nCol=false, i; 
     if (!$t.grid || $t.p.cellEdit !== true) {return;} 
     // try to find next editable cell 
     for (i=iCol-1; i>=0; i--) { 
      if ($t.p.colModel[i].editable ===true && $t.p.colModel[i].hidden !== true) { 
       nCol = i; break; 
      } 
     } 
     if(nCol !== false) { 
      $($t).jqGrid("editCell",iRow,nCol,true); 
     } else { 
      if ($t.p.savedRow.length >0) { 
       $($t).jqGrid("saveCell",iRow,iCol); 
      } 
     } 
    }); 
}, 
prevRow : function (iRow,iCol) { 
    return this.each(function(){ 
     var $t = this, nCol=false, i; 
     if (!$t.grid || $t.p.cellEdit !== true) {return;} 
     // try to find next editable cell 
     iRow--; 
     iCol++; 
     for (i=iCol-1; i>=0; i--) { 
      if ($t.p.colModel[i].editable ===true) { 
       nCol = i; break; 
      } 
     } 
     if(nCol !== false) { 
      $($t).jqGrid("editCell",iRow,nCol,true); 
     } else { 
      if ($t.p.savedRow.length >0) { 
       $($t).jqGrid("saveCell",iRow,iCol); 
      } 
     } 
    }); 
}, 
nextRow : function (iRow,iCol) { 
    return this.each(function(){ 
     var $t = this, nCol=false, i; 
     if (!$t.grid || $t.p.cellEdit !== true) {return;} 
     // try to find next editable cell 
     iRow++; 
     iCol++; 
     for (i=iCol-1; i>=0; i--) { 
      if ($t.p.colModel[i].editable ===true) { 
       nCol = i; break; 
      } 
     } 
     if(nCol !== false) { 
      $($t).jqGrid("editCell",iRow,nCol,true); 
     } else { 
      if ($t.p.savedRow.length >0) { 
       $($t).jqGrid("saveCell",iRow,iCol); 
      } 
     } 
    }); 
} 

而且我得到了與自動完成的jqGrid事件afterEditCell工作:

getautocompl = function(rowid,cellname,value,iRow,iCol){ 
setTimeout(function() { $("#"+iRow+"_"+cellname).select().focus();},10); 
if(cellname!=='date_factory' || cellname!=='date_otgr_factory' || cellname!=='date_shipment' || cellname!=='date_sklad' || cellname!=='kolinkor' 
|| cellname!=='kolkor' || cellname!=='kol_quantity' || cellname!=='description') { 
    $("#"+iRow+"_"+cellname).autocomplete({ 
     source:"../../phpmon/autocomplete.php?fname="+cellname, 
     delay:250, 
     minLength: 2}); 
} 

}

問題這裏是我不能管理自動完成熱鍵工作,當我點擊「下」按鈕,它只是去下一個單元格,而不是任何自動完成選項。

回答

1

當autocomplete元素可見時,您可以禁止jqgrid導航。像這樣:

$(document).keydown(function(fn){ 
     var key = fn.keyCode; 
     if($("#autocomplete") && key == 40) 
      /* your autocomplete action*/ 
}); 
0

它不是我所需要的,但它幫助我做到了。

我只是修改jqGrid的源代碼是這樣的:

if (e.keyCode === 40) { 
        if(!$t.grid.hDiv.loading) { 
         if ($('.ui-menu-item').length < 1) { 
         {$($t).jqGrid("nextRow",iRow,iCol);} //down 
         } 
        } else { 
         return false; 
        } 
       } 

其中的.ui菜單項是一流的自動完成構件的。

thk很多