jQuery: how to find first visible input/select/textarea excluding buttons?

前端 未结 6 787
终归单人心
终归单人心 2020-12-03 00:36

I tried

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

but it doesn\'t find anything.

What is my mis

相关标签:
6条回答
  • 2020-12-03 00:49

    Why not just target the ones you want (demo)?

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

    Edit

    Or use jQuery :input selector to filter form descendants.

    $('form').find('*').filter(':input:visible:first');
    
    0 讨论(0)
  • 2020-12-03 00:50

    You may try below code...

    $(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 讨论(0)
  • 2020-12-03 00:51

    This is an improvement over @Mottie's answer because as of jQuery 1.5.2 :text selects input elements that have no specified type attribute (in which case type="text" is implied):

    $('form').find(':text,textarea,select').filter(':visible:first')
    
    0 讨论(0)
  • 2020-12-03 00:53

    This is my summary of the above and works perfectly for me. Thanks for the info!

    <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>
    
    0 讨论(0)
  • 2020-12-03 01:03

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

    Element:

    var el = $('form#aspnetForm');
    focusFirst(el);
    
    0 讨论(0)
  • 2020-12-03 01:07

    The JQuery code is fine. You must execute in the ready handler not in the window load event.

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

    Update

    I tried with the example of Karim79(thanks for the example) and it works fine: http://jsfiddle.net/2sMfU/

    0 讨论(0)
提交回复
热议问题