JQuery: как найти первый видимый вход /select/textarea, исключая кнопки?
Я пробовал
$(":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.
Я нашел до сих пор, что для некоторых элементов он находит их (для фиксированных), а для некоторых нет.: (
Ответы
Ответ 1
Почему бы не просто настроить те, которые вам нужны (demo)?
$('form').find('input[type=text],textarea,select').filter(':visible:first');
Edit
Или используйте jQuery : input для фильтрации потомков формы.
$('form').find('*').filter(':input:visible:first');
Ответ 2
Код 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/
Ответ 3
Это мое резюме вышеизложенного и отлично работает для меня. Спасибо за информацию!
<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>
Ответ 4
Это улучшение по сравнению с ответом @Mottie, поскольку из jQuery 1.5.2 :text
выбираются элементы input
, у которых нет указанного атрибута type
(в этом случае подразумевается type="text"
):
$('form').find(':text,textarea,select').filter(':visible:first')
Ответ 5
Вот мое решение. Код должен быть достаточно прост, чтобы следовать, но вот идея:
- получить все входы, выбрать и текстовые поля
- отфильтровать все кнопки и скрытые поля
- фильтр только для разрешенных, видимых полей
- выберите первый
- сфокусировать выбранное поле
Код:
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);
Ответ 6
Вы можете попробовать под кодом...
$(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>