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