web-dev-qa-db-ja.com

jQueryのオートコンプリートコンボボックスの幅を設定することは可能ですか?

私は このjQuery UIコンボボックスオートコンプリートコントロール をjQuery UI Webサイトからすぐに使用しています:

私の問題は、1ページに複数のコンボボックスがあり、各コンボボックスに異なる幅を持たせたいということです。

このCSSを追加することで、それらすべての幅を変更できます。

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

しかし、そのうちの1つだけで幅を変更する方法がわかりません。

29
leora

シンプルな

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

動作します(リンクされたページで Firebug で試しました)。ページの最初のものを変更します。

次のようなことができます:

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

N番目を変更します。

特性によって特定のものを見つけるには、さまざまな方法で行うことができます。

最初の「オプション」(この例では「asp」)で検索します。

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

「ラベル」で見つけてください:

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

等...

コンボボックスをどのように見つけたいかアイデアがあれば更新します。

コメント用に編集

それがさらに簡単になります。リンク先のサンプルソースから、HTMLは既に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>

そのdivに一意のIDを指定します:

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

これにより、「ui-autocomplete-input」クラスの入力であるdivの子要素が選択されます。

34
Mark

http://jqueryui.com/demos/autocomplete/#combobox のコードを使用していることに注意してください。

の中に _createメソッド、次の行を追加します。

    _create: function() {
        var self = this;
        var eleCSS = this.element[0].className; //This line

次に、少しスクロールダウンして、これを見つけます:

    .addClass("ui-widget ui-widget-content ui-corner-left");

これを次のように変更します。

    .addClass("ui-widget ui-widget-content ui-corner-left "+ eleCSS);

HTML

<select class="combo-1 autocomplete">
    <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>
</select>

CSSをcombo-1に適用できるようになりました。

<script>
    $(function() {
        $('.autocomplete').combobox();
        $('.combo-1').css('width', '50px');
    });
</script>
5
Puaka

JavaScriptを気にしないでください。元々やろうとしていたように、CSSで簡単にこれを行うことができます。必要なのは、それぞれに一意のセレクターを追加することだけです。例えば:

HTMLは次のようになります

<div class="title">
    <label for="title">Title: </label>
    <input id="title">
</div>
<div class="tags">
    <label for="tags">Tags: </label>
    <input id="tags">
</div>

CSSは次のようになります

.ui-autocomplete-input
{ 
    width: 120px;
}
.title .ui-autocomplete-input
{ 
    width: 200px;
}
.tags .ui-autocomplete-input
{ 
    width: 600px;
}
5
Banzor

基本的にはすぐに利用できるウィジェットの初期化関数の1つであり、あなたが探しているものもあるかもしれません。私はそれを達成するために2つの単純な行を追加しました

$(function(){
$.widget( "ui.combobox", {
    _create: function() {
        var self = this,
        select = this.element.hide(),
        selected = select.children( ":selected" ),
        value = selected.val() ? selected.text() : "";
        var getwid = this.element.width(); // <<<<<<<<<<<< HERE
        var input = this.input = blah blah
        .insertAfter( select )
        .val( value )
        .autocomplete({
            delay: 0,
            minLength: 0,
            source: function( request, response ) {
                blah blah
            },
            blah blah
        })
        //?? .addClass( "ui-widget ui-widget-content ui-corner-left" );
        input.width(getwid); // <<<<<<<<<<<< AND HERE
        input.data( "autocomplete" )._renderItem = function( ul, item ) {
            blah blah

var getwid etcおよびinput.width(getwid);の行に注意してください

これは、選択オブジェクトの幅をコピーし、選択をオーバーレイするために作成されたコンボボックス(オートコンプリートコンボボックス)に適用するために解決しました入力。

お役に立てば幸いです。よろしく。

PS:基になる選択リストを参照せずに固定幅を本当に適用したい場合は、追加した最初の行を無視し、2番目の行を変更して定義済み配列と「this」IDを比較します。

5
Wombat_RW

JavaScript

var $myinput = $('#myinput').autocomplete({source: ['ABC', 'BCD', 'CDE']})
$myinput.data('autocomplete').menu.element.addClass('myautocomplete');

CSS

.myautocomplete{width:300px!important;}

widthを直接設定することはできません。上書きされるためです。ただし、min-width 直接。

var $myinput = $('#myinput').autocomplete({source: ['ABC', 'BCD', 'CDE']})
$myinput.data('autocomplete').menu.element.css('min-width', '300px');
5
Joyce Babu

最も簡単な方法は、オープンイベントをキャプチャし、そこで幅を設定することだと思います。

$("#autocompleteInput").bind("autocompleteopen", function(event, ui) {
  var width = 300;
  $(".ui-autocomplete.ui-menu").width(300);
});

一度にアクティブにできるオートコンプリートメニューは1つだけなので、メニュークラスの幅を変更するだけでかまいません。

3
Charles Chan

常にドキュメントに実際のCSSルールを設定してクラスに一致させることができますが、

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

どれだけ広いかを事前に知っている場合。

1
Geoff
$.widget( "custom.myAutoComplete", $.ui.autocomplete, {
    options: {
        resultClass: "leanSolutions",
    },

    _create: function()
    {
        this._super();
    },`

    _renderMenu: function(ul, items)
    {
        var that = this;
        ul.addClass(that.options.resultClass);

        $.each( items, function( index, item ) {
            that._renderItemData( ul, item );
        });
    }
});

今、あなたはこれを行うことができます:

$('.myAutoCompleteBox').myAutoComplete(
 data: ...
 etc: ...
 resultClass: 'myAutoCompleteBoxResultList'
);

そして、あなたはそれをスタイルすることができます

.myAutoCompleteBoxResultList{   
    width: 8000px;
}
1
cinatic

jQuery UI コードを少し変更するだけで、.autocomplete()関数に幅を追加できます。

公式のjQuery UIオートコンプリート(1.8.16を使用)を使用していて、幅を手動で定義したい場合。

縮小版を使用している場合(そうでない場合は、_resizeMenuを照合して手動で検索します)、検索...

_resizeMenu:function(){var a = this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(), this.element.outerWidth()))}

...そしてそれを(add this.options.width || Math.maxの前)...

_resizeMenu:function(){var a = this.menu.element;a.outerWidth(this.options.width || Math.max(a.width("").outerWidth(), this.element.outerWidth()))}

.autocomplete({width:200})関数に幅の値を含めることができるようになり、jQueryはそれを受け入れます。そうでない場合は、デフォルトで計算されます。

0
Harry B

幅はいつでもプラグインによってオーバーライドされるため、幅ではなく最大幅を設定します。

.ui-autocomplete-input
{ 
    max-width: 300px;/* you can set by percentage too */
}
0
Arfan Mirza

オートコンプリートコンボボックスを完全に制御し、幅を自動的に設定し、「a_mycomboID」のようなIDを与えるには

この行を変更

input = $( "<input>" )

input = $( "<input id=a_"+select.attr('id')+" style='width:"+select.width()+"px;'>" )

これにより、幅が自動的に設定され、a_[the id of the combo box]などのIDが与えられます。これにより、IDを使用して動作を制御できます。

実施例

0
$input.data('ui-autocomplete')._resizeMenu = function () {
    var ul = this.menu.element;
    ul.outerWidth(this.element.outerWidth()); 
 }

独自のウィジェット内で行う場合、次のようなことができます

        // Fix width of the menu
        this.input = <your dom element where you bind autocomplete>;
        this.input.data("ui-autocomplete")._resizeMenu = function () {
            var ul = this.menu.element;
            ul.outerWidth(this.element.outerWidth())
        }
0

JQuery CSSメソッドを使用するだけです:

css("width", "300px");

http://api.jquery.com/css/#css2

コンボボックスを追加した後、これを追加できます。

コードでコンボボックスをどのように使用しますか?

0
echox