防止使用箭头键滚动页面,但仍允许光标在文本字段内移动?
Prevent page-scrolling with arrow keys, but still allow cursor to move within text field?
是否可以使用 JavaScript 来防止箭头键滚动页面(在本例中为水平滚动),但仍然允许箭头键在文本字段中移动光标?
例如 - 我有一个超宽 <div>
的文本输入,当我使用箭头键将光标移动到文本的末尾时,它会水平滚动页面。
我知道我可以使用 event.preventDefault();
来防止默认行为,但这也会阻止光标移动。我也试过 e.stopPropagation();
,这似乎也没有用。
是否可以这样做,或者我必须使用 e.preventDefault();
然后手动移动光标位置 JavaScript 吗?我希望有一个更简单的解决方案。 :)
这是一个演示我的问题的 JSFiddle:
http://jsfiddle.net/h6ug57u0/
编辑:
我应该注意,我只是在输入中有焦点时才尝试实现此行为。否则,我不想妨碍浏览器的默认行为 - 我知道很多用户使用箭头键来滚动。
为什么不直接向文本框添加一个 onkeypress 事件处理程序,然后检查箭头键?
也许你需要检查输入插入符的位置以分析你是否e.preventDefault()
。
休闲一个例子:
是否可以使用 JavaScript 来防止箭头键滚动页面(在本例中为水平滚动),但仍然允许箭头键在文本字段中移动光标?
例如 - 我有一个超宽 <div>
的文本输入,当我使用箭头键将光标移动到文本的末尾时,它会水平滚动页面。
我知道我可以使用 event.preventDefault();
来防止默认行为,但这也会阻止光标移动。我也试过 e.stopPropagation();
,这似乎也没有用。
是否可以这样做,或者我必须使用 e.preventDefault();
然后手动移动光标位置 JavaScript 吗?我希望有一个更简单的解决方案。 :)
这是一个演示我的问题的 JSFiddle: http://jsfiddle.net/h6ug57u0/
编辑:
我应该注意,我只是在输入中有焦点时才尝试实现此行为。否则,我不想妨碍浏览器的默认行为 - 我知道很多用户使用箭头键来滚动。
为什么不直接向文本框添加一个 onkeypress 事件处理程序,然后检查箭头键?
也许你需要检查输入插入符的位置以分析你是否e.preventDefault()
。
休闲一个例子: