此问题仅发生在Chrome中。 (jqgrid v 4.4.1)
我有一个网格,每行有一个可编辑的单元格。更新这些可编辑字段时,我将焦点移动到网格中的下一个启用字段,以便选择该行。
问题是,如果下一个聚焦字段不在当前视口中,则浏览器(不是chrome)本身会将该记录滚动到视口,用户可以看到它。但这不会发生在Chrome中(不会将重点记录滚动到视口)。
我使用jqgrid自定义格式化程序创建这些可编辑单元格,因为我需要创建不同类型的输入字段。
当类型为无线电或组合(选择)时,Chrome工作正常,将聚焦元素滚动到屏幕,但当类型为“文本”时,这不会发生在chrome中。我找不到任何合乎逻辑的理由。
这些是创建的字段,
收音机:
<td role="gridcell" style="" aria-describedby="myGrid_editCol">
<span class="editable">
<div class="customelement" id="36_editCol" name="editCol">
<input id="36_editCol_id1" name="36_editCol_nm" type="radio" value="0"> No
<input id="36_editCol_id2" name="36_editCol_nm" type="radio" value="1" checked="checked"> Yes
<input id="36_editCol_id3" name="36_editCol_nm" type="radio" value="?"> Unknown
</div>
</span>
文本:
<td role="gridcell" style="" aria-describedby="myGrid_editCol">
<span class="editable">
<div class="customelement" id="75_editCol" name="editCol">
<input type="text" id="75_editCol_id" maxlength="10" value="sd">
</div>
</span>
答案 0 :(得分:1)
最后,我找出了这个问题的原因。
实际上这不是jqgrid的问题,但它是Chrome。
原因是:我正在使用'select()'和'setSelectionRange()'函数来定位光标并突出显示值。分配有这些功能的输入字段是具有滚动问题的输入字段。
//to highlight...
$('#myFld').select();
.....
//to position the cursor..
this.setSelectionRange(begin, end);
稍后我发现这在Chrome https://code.google.com/p/chromium/issues/detail?id=32865
中列为问题修复程序是:我使用setTimeOut()方法更改了我的代码,因为这是许多其他帖子中提到的此问题的唯一可用解决方法。
//to highlight...
setTimeout(function() {$('#myFld').select();}, 10);
.....
//to position the cursor..
setTimeout(function() {this.setSelectionRange(begin, end);}, 10);
谢谢大家..