【问题标题】:On focus input: insert value and move cursor to end在焦点输入上:插入值并将光标移动到结尾
【发布时间】:2014-02-21 05:21:48
【问题描述】:

我的目标是什么

当用户聚焦输入时:如果它是空的,我们插入前缀文本并将光标移动到末尾。如果他们进入输入,它也应该工作。

上下文/演示

我正在制作一个 jQuery 插件,它在电话号码输入旁边添加一个标志下拉列表。当用户关注输入时,它会填充一个小前缀(所选国家的拨号代码)。 Demo here.

问题

默认情况下,光标将出现在他们单击的位置,即可能位于前缀的中间)。我发现this mini plugin 将光标移动到末尾,如果你把它放在点击事件处理程序中效果很好,但是如果你进入输入,这不会触发。我尝试将它放在焦点事件处理程序中,但这不起作用(我认为是因为单击事件是在焦点事件之后触发的)。

奖励积分

对于一个简单、优雅的解决方案,不使用全局变量,并且尽可能少的事件监听器。此外,如果可能,在将光标移到末尾之前不要将光标显示在他们单击的位置。

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    这是迄今为止我想出的最佳解决方案。它勾选了所有方框,但它不是最优雅的解决方案——我觉得我可能遗漏了一些明显的东西。理想情况下,它只需要一个事件监听器。

    var input = $("input"),
      prefix = "prefix ";
    
    input.focus(function(e) {
      if (!input.val()) {
        input.val(prefix);
      }
    });
    
    input.mousedown(function(e) {
      // mousedown decides where the cursor goes, so if we're focusing
      // we must prevent this from happening
      if (!input.is(":focus") && !input.val()) {
        e.preventDefault();
        // but this also cancels the focus, so we must trigger that manually
        input.focus();
        putCursorAtEnd(input);
      }
    });
    

    这是codepen demo

    【讨论】:

    • 当使用 Tab 按钮使输入字段获得焦点时,这对我在 Firefox 中不起作用。单击输入字段时,它可以完美运行。不幸的是,我仍在寻找一种方法来通过标签来做到这一点......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2011-11-08
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多