jQuery: как найти первый видимый ввод / выбор / текстовую область, исключая кнопки? - PullRequest
80 голосов
/ 13 мая 2010

Я пытался

$(":input:not(input[type=button],input[type=submit],button):visible:first")

но ничего не находит.

В чем моя ошибка?

UPD: я выполняю это на $ (document) .load ()

<script type="text/javascript">
$(window).load(function () {
  var aspForm  = $("form#aspnetForm");
  var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm);
  firstInput.focus();
});
</script>

и в отладке я вижу, что firstInput пуст.

UPD2: Я нахожусь на странице ASP.NET под Sharepoint.

Я обнаружил, что для некоторых элементов он находит их (для фиксированных), а для некоторых нет. (

Ответы [ 6 ]

158 голосов
/ 13 мая 2010

Почему бы просто не нацелиться на тех, кого вы хотите ( demo )?

$('form').find('input[type=text],textarea,select').filter(':visible:first');

Редактировать

Или используйте jQuery : селектор input для фильтрации потомков форм.

$('form').find('*').filter(':input:visible:first');
12 голосов
/ 13 мая 2010

Код JQuery в порядке. Вы должны выполнить в обработчике готовности, а не в событии загрузки окна.

<script type="text/javascript">
$(function(){
  var aspForm  = $("form#aspnetForm");
  var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm);
  firstInput.focus();
});
</script>

Обновление

Я попробовал на примере Karim79 (спасибо за пример), и он отлично работает: http://jsfiddle.net/2sMfU/

6 голосов
/ 15 марта 2012

Это мое краткое изложение выше, и оно отлично работает для меня. Спасибо за информацию!

<script language='javascript' type='text/javascript'>
    $(document).ready(function () {
        var firstInput = $('form').find('input[type=text],input[type=password],input[type=radio],input[type=checkbox],textarea,select').filter(':visible:first');
        if (firstInput != null) {
            firstInput.focus();
        }
    });
</script>
2 голосов
/ 30 января 2016

Это улучшение по сравнению с ответом @ Mottie, поскольку с jQuery 1.5.2 :text выбирает input элементы, которые не имеют указанного атрибута type (в этом случае подразумевается type="text"):

$('form').find(':text,textarea,select').filter(':visible:first')
0 голосов
/ 29 ноября 2015

Вы можете попробовать код ниже ...

$(document).ready(function(){
    $('form').find('input[type=text],textarea,select').filter(':visible:first').focus();
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<form>
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
<input type="text" />
    
<input type="submit" />
</form>
0 голосов
/ 09 января 2015

Вот мое решение. Код должен быть достаточно простым, чтобы следовать, но вот идея:

  • получить все входные данные, выделения и текстовые области
  • отфильтровать все кнопки и скрытые поля
  • фильтр только для включенных видимых полей
  • выберите первый
  • сфокусировать выделенное поле

код:

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('form#aspnetForm');

Элемент:

var el = $('form#aspnetForm');
focusFirst(el);
...