看起来像在 Chrome 上调用 focus()(jquery-ui 默认对第一个可选项卡元素执行此操作)(无法测试 IE -- 在 OS X 上)聚焦框并选择框内的文本。
取自jquery.dialog.ui.js:
// set focus to the first tabbable element in the content area or the first button
// if there are no tabbable elements, set focus on the dialog itself
$(self.element.find(':tabbable').get().concat(
uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
uiDialog.get()))).eq(0).focus();
另一方面,Firefox 似乎只在调用焦点时将光标放在框内。因此,您必须在创建对话框后隐式调用 select 以实现您要执行的操作。
如果您重新加载计时器小提琴(而不是单击运行),您会注意到该示例每次都有效。我认为 jsFiddle 实际上是这里的罪魁祸首(可能是 hashchange 事件,或者按下“运行”后某个窗格上的一些焦点事件——我没有深入挖掘)。
编辑:(抱歉,来晚了)看起来“问题”的根本原因是 Firefox。不确定这是否是设计行为,但据我所见,Firefox 不允许 同时在不同内容窗格中的两个不同输入元素中选择文本同一页。这似乎不会影响 Chrome(假设是 IE9)。
我在本地做了一个简单的示例,它有两个并排的 iframe(我们称它们为左右)。左侧包含一个文本区域,右侧包含您的 jquery-ui 对话框——类似于您发布的小提琴。右边有如下代码:
<script type="text/javascript">
$('<div><input type="text" value="val" /></div>').dialog();
$('input').select();
</script>
left 有以下代码:
<script type="text/javascript">
setTimeout( function() {
$('textarea').focus();
}, 1000);
</script>
如果您将这些拼凑在一起并在 Firefox 中查看结果,您会注意到输入被聚焦并被选中,直到左侧的文本区域被聚焦。我怀疑 jsFiddle 中正在发生类似的事情。