Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将焦点放在jQueryUI对话框中的第一个表单元素上_Jquery_Jquery Ui_Jquery Plugins_Jquery Selectors - Fatal编程技术网

将焦点放在jQueryUI对话框中的第一个表单元素上

将焦点放在jQueryUI对话框中的第一个表单元素上,jquery,jquery-ui,jquery-plugins,jquery-selectors,Jquery,Jquery Ui,Jquery Plugins,Jquery Selectors,我有一个使用AJAX获取的登录表单,我希望在jQueryUI对话框中显示该表单,并希望第一个输入字段具有自动聚焦功能。我已经使用下面的代码使它工作了,但是我发现这是一个相当复杂的问题,并且认为应该有一个更好的解决方案。此外,在Chrome 23、IE9和Firefox 16上,这种行为似乎是一致的,因此我想借此机会对这方面有更深入的了解,并希望有人愿意透露一些信息 我在某某和其他地方发现了许多相关的问题,但提出的答案似乎都不适合我。奇怪的是,许多问题都是关于相反的问题;即删除自动对焦 表单获取等

我有一个使用AJAX获取的登录表单,我希望在jQueryUI对话框中显示该表单,并希望第一个输入字段具有自动聚焦功能。我已经使用下面的代码使它工作了,但是我发现这是一个相当复杂的问题,并且认为应该有一个更好的解决方案。此外,在Chrome 23、IE9和Firefox 16上,这种行为似乎是一致的,因此我想借此机会对这方面有更深入的了解,并希望有人愿意透露一些信息

我在某某和其他地方发现了许多相关的问题,但提出的答案似乎都不适合我。奇怪的是,许多问题都是关于相反的问题;即删除自动对焦

表单获取等由使用jQuery热键插件的键
Alt+l
触发。第一个输入元素的id为“user”。代码是

$(document).bind('keydown', 'Alt+l', function () {
    $('<div>', {
        title: 'Log in'
    }).load('?action=login').dialog({
        modal: true,
        show: 'fade',
        hide: 'fade',
        resizable: false,
        draggable: false,
        open: function (e) {
            // Hack alert!
            setTimeout(function () {
                $('input:first', e.target).focus();
            }, 100);
        }
    });
    //$('#user').focus(); <- won't work; $('#user').length == 0
});

请注意,在GET和POST请求中,URL上的响应是不同的,我认为问题是我创建对话框太早了;在
加载完成之前。因此,将回调中的对话框代码移动到
load
不会延迟:

$(document).bind('keydown', 'Alt+l', function () {
    $('<div>', {
        title: 'Log in'
    }).load('?action=login', function () {
        $(this).dialog({
            modal: true,
            show: 'fade',
            hide: 'fade',
            resizable: false,
            draggable: false,
            open: function () {
                $('input:first', this).focus();
            }
        });
    });
});
$(document).bind('keydown','Alt+l',function(){
$('', {
标题:“登录”
}).load(‘?操作=登录’,函数(){
$(此)。对话框({
莫代尔:是的,
节目:“褪色”,
隐藏:“褪色”,
可调整大小:false,
可拖动:错误,
打开:函数(){
$('input:first',this.focus();
}
});
});
});
我认为
load
是同步的,因此选择
$('input:first',这个)
在哪里并不重要,但情况似乎并非如此

也可能只需要将选择放在一个单独的事件中,以便DOM在事件处理完成后正确更新。在这种情况下,这两种解决方案基本上是等价的,除了前者是一种丑陋的黑客,而后者则不然


如果这些都是胡说八道,请毫不犹豫地纠正我。

你能举一个有效的例子吗?嗨,哈莉。请张贴您的HTML以及。
$(document).bind('keydown', 'Alt+l', function () {
    $('<div>', {
        title: 'Log in'
    }).load('?action=login', function () {
        $(this).dialog({
            modal: true,
            show: 'fade',
            hide: 'fade',
            resizable: false,
            draggable: false,
            open: function () {
                $('input:first', this).focus();
            }
        });
    });
});