【问题标题】:javascript prevent cursor to movejavascript阻止光标移动
【发布时间】:2013-03-29 22:35:53
【问题描述】:

在输入框中,我想停止光标的传播,就像我在向上键“↑”上键入一样:

之前:

tes|t // 光标在t

之前

之后:

|test // 光标开始

我想阻止光标移动,所以它必须停留在t之前。

到目前为止,我正在尝试这个,但它不起作用:

$('input').keyup(function(e) {

    if (e.which == 40) { // up key
        e.stopPropagation();
        e.stopImmediatePropagation();
        e.preventDefault();

        // actions

        return false;
    }

}

这可能吗?

【问题讨论】:

  • 试试keydown而不是keyup。
  • 这可能不是一个好主意。我个人在打字时依赖这种行为(尽管很少)......
  • @FabrícioMatté:这对 keydown 非常有效 :)

标签: javascript preventdefault stoppropagation


【解决方案1】:

您可以为此使用keydown

$('input').keydown(function(e) {
    if (e.which == 40) { // up key
        return false;
    }
}

keyup 在处理完keypress 事件后触发,keypress 应该不会针对不可打印的字符触发(尽管不同浏览器之间存在一些不一致),因此阻止了事件在@处的默认操作987654327@ 是最好的做法。

请记住,如果您没有充分的理由阻止默认操作(例如,在关注搜索字段的同时通过自动完成列表),您可能会影响其他用户的可用性,正如 @Kolink 所评论的那样。

【讨论】:

  • 确切地说,keypress 不会触发任何浏览器中的不可打印字符,尽管浏览器之间存在一些差异,哪些字符被视为可打印。
  • @Teemu 我知道keypress 应该不会触发不可打印的字符,但实际上它会触发 Chrome。
  • @Teemu Strange,刚刚在最新的稳定版 Chrome 中进行了测试,它不再为箭头键触发 keypress 事件。好吧,更新了答案以清理它。 =]
  • 在不同的浏览器之间确实存在一些不一致,例如 FF19 和 IE10 为 ESC 触发 onkeypress(如何打印它?),但 Chrome25 并没有...+1: )。
  • 多年后,但这对我不起作用(OS X 上的 Chrome)
猜你喜欢
  • 2019-09-05
  • 2023-03-05
  • 2023-03-19
  • 2014-01-05
  • 2012-12-31
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多