6

我看到当我在“onfocus”功能的帮助下在文本框中选择文本时,我没有得到我期望的行为。

这是演示网址:http: //jsfiddle.net/BquZz/

代码副本如下:

<!DOCTYPE html>
<html>
<head>
<title>Select all</title>
<script type="text/javascript">
var text;
var log;

function select()
{
    text.select();
    log.innerHTML += ' - select';
}

window.onload = function() {
    text = document.getElementById('text');
    log = document.getElementById('log');
    log.innerHTML = 'start';

    text.onfocus = select;
}
</script>
</head>
<body>
<input type="text" id="text" readonly="readonly" value="hello, world">
<div id="log">
</div>
</body>
</html>

我多次重复以下实验。

  1. 单击文本框外的某处以模糊文本框。
  2. 单击文本框以聚焦文本框。

我希望每次在第 2 步结束时,都应该选择文本框中的字符串“hello, world”。然而,这不是我观察到的。在 Debian GNU/Linux (Wheezy) 上使用 Iceweasel 11.0,在替代实验结束时“hello, world”未被选中。在剩下的实验中,有时我看到字符串“hello, world”完全被选中,有时,部分被选中。在 Debian GNU/Linux (Wheezy) 上使用 Chrome 18.0.1025.33 beta 时,我很少得到想要的结果。大多数时候,没有选择任何内容。

我知道解决这个问题的方法。更改text.onfocus = selecttext.onclick = select。使用select()调用的函数onclick,我得到了预期的结果。这是一个演示 URL,它使用“onclick”显示所需的结果:http: //jsfiddle.net/5EZwR/

你能帮我理解为什么我没有用'onfocus'得到预期的结果,但我用'onclick'得到了它吗?

4

1 回答 1

2

我认为问题在于它.select()了两件事:它将选择范围设置为包括所有文本,导致该字段被聚焦。浏览器似乎不喜欢重复选择,尽管 Chrome 和 Firefox 的行为不同。

如果您将其更改为:

text.setSelectionRange(0, 10000);

然后它可以在 Firefox 中运行。(我认为 Internet Explorer 必须有所不同。)

编辑——这个 Stackoverflow 问题有一个很好的答案(Dimitrov 先生的),应该适用于所有浏览器。

于 2012-03-23T12:37:53.773 回答