3

This code should select the contents of a textarea when that textarea is selected. 但是,它本身不起作用:

        $("#form").focus(function() {
            $("#form").select();
        });

只有当我给它一个setTimeout0 时它才有效,就像这样:

        $("#form").focus(function() {
            setTimeout(function() {
                $("#form").select();
            }, 0);
        });

这是为什么?

4

2 回答 2

1

在处理此类事情时,请始终记住这一点:

浏览器是单线程的。这是一个简单的模型,但可以这样想:等待事件(击键、鼠标、触摸、计时器等)、执行脚本、更新页面,一遍又一遍。

当您setTimeout(func, 0)正在做的是告诉浏览器在下一次迭代而不是这次迭代时进行。所以它会有时间来解析表单标签。或者,如果您正在处理宽度或高度,它可能有时间显示项目并因此计算其宽度或高度(而不是将它们读取为 0)。

可能正在发生的事情是通过聚焦 textarea 调用的事件级联中的某些内容最终也会取消选择其内容。通过将选择移动到下一次迭代,您可以将其从聚焦、全选、取消全选改为聚焦、取消全选、全选。

于 2012-07-12T01:03:43.067 回答
1

看起来第一个代码片段正在选择,然后取消选择文本。我怀疑文本选择是在focus事件完成后在幕后处理的,并在事件之后setTimeout执行select(当幕后的事情已经发生时)。

于 2012-07-12T00:45:08.570 回答