Search code examples
jquerycomboboxwidthjquery-ui-autocomplete

Is it possible to set the width of a jQuery autocomplete combobox?


I am using this jQuery UI combobox autocomplete control out of the box off the jQuery UI website:

My issue is that I have multiple comboboxes on a page, and I want them to have different widths for each one.

I can change the width for ALL of them by adding this CSS:

 .ui-autocomplete-input
 {
     width: 300px;
 }

but I can't figure out a way to change the width on just one of them.


Solution

  • A simple

    $('.ui-autocomplete-input').css('width','300px')
    

    works (I tried it on the linked page with Firebug) to change the first one on the page.

    You can do something like:

    $($('.ui-autocomplete-input')[N]).css('width','300px') #N is the nth box on the page
    

    To change the Nth one.

    To find a specific one by a characteristic, you could do it in many ways.

    Find it by the first "option" (in this example "asp"):

    $('.ui-autocomplete-input').map(function(){if ($(this).parent().children()[1].options[0].text == 'asp'){ $(this).css('width','300px'); return false;} })
    

    Find it by its "label":

    $('.ui-autocomplete-input').map(function(){if ($($(this).parent().children()[0]).text() == "Your preferred programming language: "){ $(this).css('width','300px'); return false;}})
    

    etc...

    I'll update if you have an idea of how you want to find your combobox.

    EDIT FOR COMMENT

    oo, that makes it even easier. From the example source you linked to, the HTML is already wrapped in a div:

    <div class="ui-widget" id="uniqueID">
        <label>Your preferred programming language: </label>
        <select>
            <option value="a">asp</option>
            <option value="c">c</option>
            <option value="cpp">c++</option>
            <option value="cf">coldfusion</option>
            <option value="g">groovy</option>
            <option value="h">haskell</option>
            <option value="j">java</option>
            <option value="js">javascript</option>
            <option value="p1">perl</option>
            <option value="p2">php</option>
            <option value="p3">python</option>
            <option value="r">ruby</option>
            <option value="s">scala</option>
        </select>
    </div>
    

    I would give that div a unique id then:

    $('#uniqueID > input.ui-autocomplete-input').css('width', '300px')
    

    That selects child elements of your div that are inputs with a class of "ui-autocomplete-input".