【问题标题】:Google Chrome cancel up and down arrow events谷歌浏览器取消向上和向下箭头事件
【发布时间】:2011-04-17 14:30:49
【问题描述】:

我正在为网站制作 AutoSuggest 小部件,其工作方式是,当用户在输入文本框中写入内容时,会显示带有建议的 div,并且用户可以通过鼠标或上下箭头导航它.每个单词都是单独建议的(不像 Google 建议它在整个短语中的位置。

我在使用 Google Chrome 输入框时遇到问题,因为当我按下向上或向下箭头时,浏览器会出现默认行为 - 使用 carret 跳转到文本框的末尾或开头(例如使用 Home 或 End 按钮) .在 Firefox 或 Internet Explorer 上没有这样的效果。如何禁用此效果?

我正在从事件处理函数返回“false”,并且还使用了这里的函数 http://www.javascripter.net/faq/canceleventbubbling.htm 但仍然 carret 在 Chrome 上跳跃...

编辑:在 Safari 上效果相同...

【问题讨论】:

  • 一年前写自动提示时遇到同样的问题...
  • 我注意到 Safari 存在相同的行为,因此它是一种 WebKit 的工作方式 -.- 还发现要完成这项工作,因为我希望用户必须使用 ctrl+down 或 up。 ..
  • 你在使用 jQuery 吗?无论哪种方式,尝试使用return false; 捕获keydownkeyupkeypress,并在返回之前将导航代码放入keydown 处理程序中。
  • 不,我取消了每个与键相关的事件,但仍然存在跳闸,我想这不是由事件驱动的,而是某种内部浏览器行为;/

标签: javascript google-chrome safari dom-events event-bubbling


【解决方案1】:

您是否尝试过阻止默认行为?

window.addEventListener('keydown', function(e) {
  e.preventDefault();
  ...
}, false);

【讨论】:

  • 我没有使用 jQuery,但我仍然认为它不起作用,因为这不是事件行为。我这样做的方式是,当 keydown 被触发时,插入符号仍然处于良好位置,因此我可以存储位置并在跳转后将其取回。
【解决方案2】:

不是一个真正的问题解决方案,但我已经通过使用这个函数做了一个解决方法 http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/ 并在事件之前捕获 carret 位置(或者不是在触发 keydown 事件之前,carret 仍然处于良好位置),然后在事件之后将其设置回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多