我正在使用从jQuery UI网站上获取的jQuery UI组合框自动完成控件:
我的问题是我在页面上有多个组合框,我希望每个组合框的宽度都不同。
我可以通过添加以下CSS来更改它们所有的宽度:
.ui-autocomplete-input
{
width: 300px;
}
但我找不到一种方法只改变其中一个的宽度。
我正在使用从jQuery UI网站上获取的jQuery UI组合框自动完成控件:
我的问题是我在页面上有多个组合框,我希望每个组合框的宽度都不同。
我可以通过添加以下CSS来更改它们所有的宽度:
.ui-autocomplete-input
{
width: 300px;
}
但我找不到一种方法只改变其中一个的宽度。
$('.ui-autocomplete-input').css('width','300px')
这个方法(我用Firebug在链接的页面上试过)可以用来改变页面上的第一个元素。
你可以像下面这样做:
$($('.ui-autocomplete-input')[N]).css('width','300px') #N is the nth box on the page
更改第N个。
通过特征找到特定的一个,你可以用许多方法做到这一点。
通过第一个"option" (在本例中为"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>
$('#uniqueID > input.ui-autocomplete-input').css('width', '300px')
_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>
<script>
$(function() {
$('.autocomplete').combobox();
$('.combo-1').css('width', '50px');
});
</script>
不必费心学习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>
.ui-autocomplete-input
{
width: 120px;
}
.title .ui-autocomplete-input
{
width: 200px;
}
.tags .ui-autocomplete-input
{
width: 600px;
}
$(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
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');
我认为最简单的方法是捕获打开事件,然后在那里设置宽度:
$("#autocompleteInput").bind("autocompleteopen", function(event, ui) {
var width = 300;
$(".ui-autocomplete.ui-menu").width(300);
});
由于一次只能有一个自动完成菜单处于活动状态,因此只需更改菜单类的宽度即可。
$.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;
}
你可以在文档中设置一个实际的CSS规则来匹配这个类。
.ui-autocomplete-input
{
width: 300px;
}
我使用以下代码可以正常工作:
$.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/
$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())
}