6

我在 Windows 7 上的 Firefox 11 中运行此代码。(请参阅http://jsfiddle.net/QStkd/)。

$('<div><input type="text" value="val" /></div>').dialog();

select()​ 输入中的值没有被选中,这在 Chrome 和 IE 中是这样做的,如果我手动调用该方法也不起作用。

这是一个已知问题吗?有什么方法可以选择吗?计时器可以工作,但是如果我run在加载后单击 jsfiddle,它就不再起作用了。

4

3 回答 3

3

看起来像focus()在 Chrome 上调用(默认情况下 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>

左边有以下代码:

<script type="text/javascript">
setTimeout( function() {
    $('textarea').focus();
}, 1000);
</script>

如果您将它们拼凑在一起并在 Firefox 中查看结果,您会注意到输入已聚焦并被选中,直到左侧的文本区域聚焦。我怀疑 jsFiddle 中正在发生类似的事情。

于 2012-04-06T05:07:27.170 回答
2

尝试使用openui 对话框的事件。打开对话框时触发此事件。

$('<div><input id="yourInput" type="text" value="val" /></div>').dialog({
    open:function(){
     $("#yourInput").focus().select();
    }
        }
)

http://jsfiddle.net/sergeir82/A6Wah/8/

http://jsbin.com/etivej/4/

于 2012-04-10T08:54:22.403 回答
0

这是 dom 中的 FF 问题,确定您是否设置了DOCTYPE. 没有一个很好的方法来解决它,专注的计时器往往是“hack around”。但是还有另一个步骤,如果您的 Doctype 设置为 w3 xhtml 标准,您可以使用this它来选择焦点。添加onfocus="this.select();"为您的输入的属性,以便在获得焦点时立即选择它。

于 2012-04-10T14:40:14.993 回答