我在jQuery UI网站上使用this jQuery UI combobox autocomplete control开箱即用:
我的问题是我在页面上有多个组合框,我希望它们的宽度不同。
我可以通过添加这个CSS来改变所有这些的宽度:
.ui-autocomplete-input
{
width: 300px;
}
但我无法找到改变其中一个宽度的方法。
答案 0 :(得分:34)
一个简单的
$('.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;}})
等...
如果你知道如何找到你的组合框,我会更新。
编辑评论
oo,这让它变得更加容易。从您链接到的示例源中,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')
选择div的子元素作为输入,使用“ui-autocomplete-input”类。
答案 1 :(得分:5)
请注意,我使用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);
<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>
答案 2 :(得分:5)
不要打扰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;
}
答案 3 :(得分:5)
的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');
答案 4 :(得分:5)
我使用以下内容,它基本上是现成的小部件初始化函数之一,也可能是您正在寻找的内容。我只添加了两条简单的线来实现它
$(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 等行和 input.width(getwid);
我决定复制选择对象的宽度并将其应用到组合框,因为它们(自动完成组合框)被创建以覆盖选择输入。
希望有所帮助。问候。
PS:我相信如果您真的只想应用不引用基础选择列表的固定宽度,则忽略我添加的第一行并更改第二行以将预定义数组与“this”id进行比较。
答案 5 :(得分:3)
我认为最简单的方法是捕获open事件,然后在那里设置宽度:
$("#autocompleteInput").bind("autocompleteopen", function(event, ui) {
var width = 300;
$(".ui-autocomplete.ui-menu").width(300);
});
由于一次只能激活一个自动完成菜单,因此只需更改菜单类的宽度即可。
答案 6 :(得分:1)
您始终可以在文档中设置实际的CSS规则以匹配类
.ui-autocomplete-input
{
width: 300px;
}
如果您事先知道它有多宽。
答案 7 :(得分:1)
$.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;
}
答案 8 :(得分:1)
它对我有用:
$.extend($.ui.autocomplete.prototype.options, {
open: function(event, ui) {
$(this).autocomplete("widget").css({
"width": ($(this).outerWidth() + "px")
});
}
});
感谢Michael Simons https://info.michael-simons.eu/2013/05/02/how-to-fix-jquery-uis-autocomplete-width/
答案 9 :(得分:0)
只需使用jQuery CSS方法:
css("width", "300px");
http://api.jquery.com/css/#css2
您可以在添加组合框后附加此内容。
如何在代码中使用组合框?
答案 10 :(得分:0)
对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()))}
...并将其替换为(在Math.max之前添加this.options.width ||
)...
_resizeMenu:function(){var a = this.menu.element;a.outerWidth(this.options.width || Math.max(a.width("").outerWidth(), this.element.outerWidth()))}
您现在可以在.autocomplete({width:200})函数中包含宽度值,jQuery将尊重它。如果没有,它将默认为计算它。
答案 11 :(得分:0)
对自动完成组合框进行完全控制 并自动设置宽度并为其指定ID“a_mycomboID”
更改此行
input = $( "<input>" )
要
input = $( "<input id=a_"+select.attr('id')+" style='width:"+select.width()+"px;'>" )
这将自动设置宽度,并为其指定a_[the id of the combo box]
等ID。这将允许您使用ID控制行为。
答案 12 :(得分: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())
}
答案 13 :(得分:0)
设置最大宽度而不是宽度,因为随时都会通过插件覆盖宽度..
.ui-autocomplete-input
{
max-width: 300px;/* you can set by percentage too */
}