【发布时间】:2011-04-30 21:04:32
【问题描述】:
这是一个棘手的早晨开始。
我有一系列图标。当您单击一个图标时,它会加载一个表单。一些表单有输入[文本]其他有文本区域。
我试图想出的是 jQuery,一旦我加载了我可以运行的表单,它将...专注于第一个输入或文本区域,无论它可能是动态的,所以我不需要 if 块.
想法?
【问题讨论】:
-
您可以发布加载新表单的代码吗?
这是一个棘手的早晨开始。
我有一系列图标。当您单击一个图标时,它会加载一个表单。一些表单有输入[文本]其他有文本区域。
我试图想出的是 jQuery,一旦我加载了我可以运行的表单,它将...专注于第一个输入或文本区域,无论它可能是动态的,所以我不需要 if 块.
想法?
【问题讨论】:
我认为应该这样做
$("#formId input:text, #formId textarea").first().focus();
【讨论】:
$('input:visible:first').focus();
这里是:
$('#form-id :input:enabled:visible:first').focus();
#form-id 是表单的ID; :input 选择任何输入和文本区域元素; :enabled 确保输入是可编辑的; :visble 确保元素可见; :first 很明显
【讨论】:
你的一些代码会很好..但这应该很容易。
假设您将 for 加载到您知道...的 id 的 div 中
你所要做的就是像
$('#TheIdOfYourFormDiv').find('input, textarea').first().focus()
加载表单后
【讨论】:
dothis.dothat.thendothis我喜欢!
$(":input:first").focus();
:input 选择器抓取所有输入、文本区域、选择和按钮元素。
【讨论】:
编辑
这实际上并不是一个很好的解决方案。下面 Patricia 和 Onkelborg 的解决方案要优雅得多。
var $firstInput = jQuery("input:first");
var $firstTextArea = jQuery("textarea:first");
if(firstInput.length == 0) {
$firstTextArea.focus();
}
else {
$firstInput.focus();
}
【讨论】:
它在加载事件中为我工作。
$('#Div').find('input:first').focus();
【讨论】:
这是我的解决方案。代码应该很容易理解,但这里的想法是:
代码:
function focusFirst(parent) {
$(parent).find('input, textarea, select')
.not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button')
.filter(':enabled:visible:first')
.focus();
}
然后只需使用您的父元素或选择器调用 focusFirst。
选择器:
focusFirst('#parentId');
元素:
var el = $('#parentId');
focusFirst(el);
【讨论】:
这是@craztmatt 和其他人在此基础上开发的引导模式的解决方案。我已经扩展为从触发事件的模式开始选择目标元素。这个捕获输入、文本区域和选择元素。
// do this to make bootstrap modals auto-focus.
// delegate to body so that we only have to set it up once.
$('body').on('shown.bs.modal', function (e) {
var ele = $(e.target).find('input[type=text],textarea,select').filter(':visible:first'); // find the first input on the bs modal
if (ele) {ele.focus();} // if we found one then set focus.
})
不完全是 OP 的问题,但也应该适用于纯 jquery 案例。
【讨论】:
因为 :visible 是一个 jQuery 扩展,而不是 CSS 的一部分 规范,使用 :visible 的查询不能利用 本机 DOM querySelectorAll() 提供的性能提升 方法。使用 :visible 来选择时达到最佳性能 元素,首先使用纯 CSS 选择器选择元素,然后 使用 .filter(":visible")。
改用:
$('form').filter(':input:first').focus();
或:
$('input').first().focus(); //as shown in the "correct" answer.
使用.focus()时也要记住
尝试将焦点设置到隐藏元素会导致错误 IE浏览器。注意只在元素上使用 .focus() 可见的。在不设置的情况下运行元素的焦点事件处理程序 聚焦到元素,使用 .triggerHandler("focus") 而不是 .focus()。
【讨论】:
在寻找快速解决方案以选择具有空白值的第一个输入时发现此问题。
想出了以下内容,希望对某人有所帮助
$(':input[value=""]:enabled:visible:first').focus();
【讨论】: