当选择textarea时,此代码应选择textarea的内容。但是,它本身不起作用:
$("#form").focus(function() {
$("#form").select();
});
仅当我给它setTimeout
为0时才有效:
$("#form").focus(function() {
setTimeout(function() {
$("#form").select();
}, 0);
});
为什么?
答案 0 :(得分:1)
看起来第一个代码段正在选择,然后取消选择文本。我怀疑在focus
事件结束后正在幕后处理文本选择,setTimeout
在事件发生后执行select
(当幕后的东西已经存在时)发生)。
答案 1 :(得分:1)
在处理此类事情时始终记住这一点:
浏览器是单线程的。这是一个简单的模型,但想到这样:等待事件(按键,鼠标,触摸,计时器等),执行脚本,一遍又一遍地更新页面。
当你setTimeout(func, 0)
正在做的事情是告诉浏览器 next 迭代而不是这个。因此,它将有时间解析表单标记。或者,如果您正在处理宽度或高度,则可能有时间显示该项目,从而计算其宽度或高度(而不是将其读取为0)。
可能发生的事情是,通过聚焦textarea而调用的事件级联中的某些内容最终也会取消选择其内容。通过将选择移动到下一个迭代,您可以将其从焦点改变,选择全部,取消全选以进行聚焦,取消全选,全选。