在输入或文本区域使用光标键时阻止div滚动 - safari / chrome

时间:2013-02-12 18:44:00

标签: jquery forms webkit keyboard

http://jsfiddle.net/ianhk/t9Hj6/

<div style="width:250px; height: 100px; border: black solid 1px; overflow:auto">
  <table style="height:200px; border: red solid 1px">
    <tr>
      <td>abcdefghi</td>
      <td>
        <input id="text" value="Some text">
      </td>
      <td>abcdefghi</td>
    </tr>
    <tr>
      <td>test</td>
      <td>test</td>
      <td>test</td>
    </tr>
  </table>
 </div>

$("#text").on("keydown", function (ev) {
   ev.stopPropagation();
});

在上面的小提琴中,我有一个溢出设置为auto的div,包含一个超大表,其中一个单元格中有一个输入表单元素。

使用左/右光标键的safari和chrome会使div在到达最左/最右位置时向左/向右滚动。我想避免div滚动。

我尝试过的事情:

  • keydown / preventDefault - 阻止光标键工作(显然)
  • keydown / stopPropagation - 没有变化,期待这会阻止事件冒泡到div
  • 将输入包装在表单中并尝试在该
  • 上停止传播
  • 在编辑时禁用div上的滚动 - 当IE / FF隐藏/显示滚动条和内容移动时,这会变得复杂

1 个答案:

答案 0 :(得分:0)

这是一个装备,但您可以使用例如https://stackoverflow.com/a/2897510来检测插入符号相对于文本长度的位置,然后如果在文本的结尾(或开始),您可以简单地返回false并试图移动。