jQuery 动态聚焦于第一个 INPUT 或 Textarea

发布于 2024-09-29 08:20:54 字数 173 浏览 4 评论 0原文

这是一个棘手的早晨开始。

我有一系列的图标。当您单击图标时,它会加载一个表单。一些表单有输入[文本],其他表单有文本区域。

我想要提出的是 jQuery,一旦我加载了表单,我就可以运行它将...专注于第一个输入或文本区域,无论它是什么,都是动态的,所以我不需要 if 块。

有想法吗?

Here's a tricky one to start the morning.

I have a series of icons. When you click an icon it loads a form. Some of the forms have input[text] others have textareas.

What I'm trying to come up with is jQuery that once I load the form I can run that will... Focus in on the first input or textarea whatever it may be, dynamically so I don't need if blocks.

Ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

季末如歌 2024-10-06 08:20:54

我认为这应该可以

$("#formId input:text, #formId textarea").first().focus();

This should do it I think

$("#formId input:text, #formId textarea").first().focus();
写下不归期 2024-10-06 08:20:54

这里是:

$('#form-id :input:enabled:visible:first').focus();

#form-id是表单的ID;
:input 选择任何输入和文本区域元素;
:enabled 确保输入可编辑;
:visble 确保元素可见;
: 首先很明显

Here it is:

$('#form-id :input:enabled:visible:first').focus();

#form-id is ID of the form;
:input selects any input and textarea element;
:enabled ensures the input is editable;
:viisble ensures that the element is visible;
:first is obvious

魔法唧唧 2024-10-06 08:20:54

你的一些代码会很好..但这应该很容易。

假设您将 for 加载到您知道 id 的 div 中...

您所要做的就是

$('#TheIdOfYourFormDiv').find('input, textarea').first().focus()

加载表单之后

some of your code would be nice.. but this should be easy.

assuming your loading your for into a div that you know the id of....

all you have to do is something like

$('#TheIdOfYourFormDiv').find('input, textarea').first().focus()

after you've loaded your form

污味仙女 2024-10-06 08:20:54
$(":input:first").focus(); 

:input 选择器抓取所有输入、文本区域、选择和按钮元素。

$(":input:first").focus(); 

The :input selector grabs all input, textarea, select and button elements.

×纯※雪 2024-10-06 08:20:54

编辑

这实际上并不是一个很好的解决方案。以下 Patricia 和 Onkelborg 的解决方案要优雅得多。

var $firstInput = jQuery("input:first");
var $firstTextArea = jQuery("textarea:first");

if(firstInput.length == 0) {
  $firstTextArea.focus();
}

else {
  $firstInput.focus();
}

EDIT

This is actually not that great of a solution. Patricia's and Onkelborg's solutions below are much more elegant.

var $firstInput = jQuery("input:first");
var $firstTextArea = jQuery("textarea:first");

if(firstInput.length == 0) {
  $firstTextArea.focus();
}

else {
  $firstInput.focus();
}
素衣风尘叹 2024-10-06 08:20:54

它在加载事件中对我有用。

$('#Div').find('input:first').focus();

It's working for me in the load event.

$('#Div').find('input:first').focus();
债姬 2024-10-06 08:20:54

这是我的解决方案。代码应该很容易理解,但想法如下:

  • 获取所有输入、选择和文本区域
  • 过滤掉所有按钮和隐藏字段
  • 过滤到仅启用的可见字段
  • 选择第一个
  • 焦点选定的字段

代码:

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);

Here is my solution. The code should be easy enough to follow but here is the idea:

  • get all inputs, selects, and textareas
  • filter out all buttons and hidden fields
  • filter to only enabled, visible fields
  • select the first one
  • focus the selected field

The code:

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();
}

Then simply call focusFirst with your parent element or selector.

Selector:

focusFirst('#parentId');

Element:

var el = $('#parentId');
focusFirst(el);
呢古 2024-10-06 08:20:54

这是 @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情况。

Here's A solution for bootstrap modals developed on top of that by @craztmatt and others. I have extended to have the selection of the target element start at the modal that triggered the event. This one catches inputs, textarea AND select elements.

// 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.
})

Not precisely the OP's question but should be adaptable to a pure jquery case too.

聆听风音 2024-10-06 08:20:54

因为 :visible 是 jQuery 扩展而不是 CSS 的一部分
规范,使用 :visible 的查询不能利用
原生 DOM querySelectorAll() 提供的性能提升
方法。使用 :visible 进行选择时获得最佳性能
elements,首先使用纯 CSS 选择器选择元素,然后
使用 .filter(":visible")。

使用:

$('form').filter(':input:first').focus();

或:

$('input').first().focus(); //as shown in the "correct" answer.

使用 .focus() 时还要记住

尝试将焦点设置到隐藏元素会导致错误
互联网浏览器。请注意仅对以下元素使用 .focus()
可见的。在不设置的情况下运行元素的焦点事件处理程序
焦点到元素,使用 .triggerHandler( "focus" ) 而不是
.focus()。

Because :visible is a jQuery extension and not part of the CSS
specification, queries using :visible cannot take advantage of the
performance boost provided by the native DOM querySelectorAll()
method. To achieve the best performance when using :visible to select
elements, first select the elements using a pure CSS selector, then
use .filter(":visible").

Use instead:

$('form').filter(':input:first').focus();

or:

$('input').first().focus(); //as shown in the "correct" answer.

Also bear in mind when using .focus()

Attempting to set focus to a hidden element causes an error in
Internet Explorer. Take care to only use .focus() on elements that are
visible. To run an element's focus event handlers without setting
focus to the element, use .triggerHandler( "focus" ) instead of
.focus().

叫嚣ゝ 2024-10-06 08:20:54

在寻找快速解决方案以选择具有空白值的第一个输入时发现了这个问题。

提出以下内容,希望对某人有所帮助

$(':input[value=""]:enabled:visible:first').focus();

Found this question when looking for a quick solution to select the first input with a blank value.

Came up with the following, hope it helps someone

$(':input[value=""]:enabled:visible:first').focus();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文