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