【问题标题】:How to prevent highlighting all text when tabbing between inputs?在输入之间切换时如何防止突出显示所有文本?
【发布时间】:2017-03-17 11:08:41
【问题描述】:

我有许多需要重复填写的输入字段,因此我通常使用 Tab 来浏览表单。

字段具有需要添加的默认后缀值。当我通过鼠标点击输入时,它按预期工作。

但是,当我在输入之间切换时,它会选择所有文本,这在我的情况下是不受欢迎的行为。

看看这个:

function setCaretPosition(elem, caretPos) {
  if (elem == null) return;
  if (elem.createTextRange) {
    var range = elem.createTextRange();
    range.move('character', caretPos);
    range.select();
  } else if (elem.selectionStart) {
    elem.focus();
    elem.setSelectionRange(caretPos, caretPos);
  } else {
    elem.focus();
  }
}

$(document).ready(function() {
  $('input').focus(function() {
    setCaretPosition(this, 0);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input1" value=" km/h" />
<input type="text" id="input2" value=" kg" />
  • 当您在任何输入内单击时,插入符号会设置在开头。
  • 当您在输入之间 Tab 插入符号未设置。而是突出显示整个输入内容。

如何防止文本输入在使用标签导航时突出显示其内容?

我更喜欢不使用setTimeout 的答案(如果可能的话)。

【问题讨论】:

  • 如果你认为它是重复的,为什么不以重复为理由投票关闭?
  • 您确定点击时它可以工作吗?单击时插入符号不会移动到位置 0!
  • @ibrahimmahrir 它绝对适用于最新的 Firefox。我真的不需要与其他浏览器兼容,因为它旨在在我的内部工具中工作。
  • 注意:插入符号将设置为 Chrome 中值的末尾。 FF和IE设置为开头。我知道你说过你不关心交叉兼容性,只是给别人的一个注释。

标签: javascript html


【解决方案1】:

在 Chrome 和 Explorer 上(不适用于 Edge 和 Firefox),只需:

<input type="text" value=" km/h" onfocus="this.setSelectionRange(this.value.length, this.value.length)"/>
<input type="text" value=" kg" onfocus="this.setSelectionRange(this.value.length, this.value.length)"/>

在 Firefox 和 Chrome 上(不适用于 Edge 和 Explorer)

jQuery.fn.putCursorAtEnd = function() {
  return this.each(function() {
    // Cache references
    var $el = $(this), el = this;
    
    // Timeout seems to be required for Firefox
    setTimeout(function() {
      el.setSelectionRange($el.val().length, $el.val().length);
    }, 0);
  });
};

var searchInput = $("input");

searchInput.on("focus", function() { // could be on any event
    searchInput.putCursorAtEnd()
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" value=" km/h" />
<input type="text" value=" kg" />

【讨论】:

  • 对不起,它不起作用。当我关注第一个输入并单击 Tab 时,它会关注第二个输入并选择其所有内容。在最新的 Firefox 上测试。
  • 可以确认FF的行为不同:(
  • 也确认了,适用于 chrome 和 explorer,不适用于 firefox 和 edge 会查看
  • firefox和IE好像需要setTimeout,即使时间设置为0
猜你喜欢
  • 2023-04-03
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2018-10-20
  • 2021-03-06
  • 2020-01-12
相关资源
最近更新 更多