问题描述
|
我的页面上有一个jqgrid表,其中有很多列,因此网格比浏览器窗口宽,会出现水平滚动条。
问题是,当用户单击一行以开始编辑时,浏览器框架会向左滚动,从而使用户感到困惑,甚至有时会隐藏所选的单元格。
我已经尝试过在这里和这里找到的方法,但是它们对我不起作用-我可以获取当前的滚动位置,但无法设置。
单元格在columnModel中设置为可编辑,因此我在formatCell事件中获得滚动位置,并尝试使用以下代码在afterEditCell处设置滚动位置:
afterEditCell: function(rowid,cellname,value,irow,icol) {
jQuery(\"#list\").closest(\".ui-jqgrid-bdiv\").scrollLeft(scrollPosition);
window.scrollTo(scrollPosition,0);
if (window.pageXOffset) {window.pageXOffset = scrollPosition;};
if (document.body.parentElement) {document.body.parentElement.scrollLeft = scrollPosition;};
if (document.body) {document.body.scrollLeft = scrollPosition;};
并且,这不会影响网格的行为-滚动到最左侧的位置。
还有其他方法可以实现吗?
解决方法
在loadComplete函数上尝试这个
var offset = $(\"#\" + *subgrid_table_id*).offset();
var w = $(window);
var fromTop = offset.top - w.scrollTop();
$(\'html,body\').animate({
scrollTop: offset.top - fromTop
},1);
该代码保留网格的最后位置
,在setTimeout()中移动滚动代码,例如:
setTimeout(function(){
grid2.closest(\“。ui-jqgrid-bdiv \”)。scrollLeft(scrollPosition);
} 100);
,@Andrus-为什么超时?无论如何,我在解决方案中实现了您的代码。
从jqgrid页面进行内联编辑:
onSelectRow: function(id){
if(id && id!==lastSel){
jQuery(\'#grid_id\').restoreRow(lastSel);
lastSel=id;
}
jQuery(\'#grid_id\').editRow(id,true);
},
我的版本没有向左“跳”的滚动:
onSelectRow: function(id){
scrollPosition = jQuery(\'#grid_id\').closest(\".ui-jqgrid-bdiv\").scrollLeft();
if(id && id!==lastSel){
jQuery(\'#grid_id\').restoreRow(lastSel);
lastSel=id;
}
jQuery(\'#grid_id\').editRow(id,true).scrollLeft(scrollPosition);
},
,onSelectRow: function(rowid,status,e){
if (lastID) grid.jqGrid(\"restoreRow\",lastID);
if (rowid !== lastID) {
var scrollPosition = grid.closest(\".ui-jqgrid-bdiv\").scrollLeft();
grid.jqGrid(\"editRow\",rowid,false,function(){
setTimeout(function(){ $(\"input,select\",e.target).focus(); },10);
});
setTimeout(function(){ grid.closest(\".ui-jqgrid-bdiv\").scrollLeft(scrollPosition); },0);
lastID = rowid;
}
else lastID = null;
}