gpt4 book ai didi

jQuery UI 自动完成自定义标记

转载 作者:行者123 更新时间:2023-12-01 00:11:29 24 4
gpt4 key购买 nike

我正在使用 jQuery UI 自动完成 来分类搜索结果,并且我想用 CSS 为其增添趣味。

不幸的是,jQuery UI 并不容易,而且默认标记确实很难使用:

<input class="ui-autocomplete-input"/>
<ul class="ui-autocomplete ui-menu ui-widget ui-widget-content ui-corner-all">
<li class='ui-autocomplete-category'>Category 1</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 1</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 2</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 3</a>
</li>
<li class='ui-autocomplete-category'>Category 2</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 1</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 2</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 3</a>
</li>
</ul>

我想要的标记是这样的:

<input class="ui-autocomplete-input"/>
<ul class="ui-autocomplete ui-catcomplete">
<div class="ui-block">
<div class="ui-autocomplete-category">Category 1</div>
<div class="ui-list">
<li class="ui-menu-item">
<a class="ui-corner-all">item 1</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 2</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 3</a>
</li>
</div>
</div>
<div class="ui-block">
<div class="ui-autocomplete-category">Category 1</div>
<div class="ui-list">
<li class="ui-menu-item">
<a class="ui-corner-all">item 1</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 2</a>
</li>
<li class="ui-menu-item">
<a class="ui-corner-all">item 3</a>
</li>
</div>
</div>
</ul>

这就是我达到极限的地方。

我实际上设法创建了标记,但我无法再通过单击该项目来选择和提交。

这是我想出的代码:

$.widget( "custom.catcomplete", $.ui.autocomplete, {

_renderMenu: function( ul, items ) {
var self = this,
currentCategory = "",
i = 0;

$.each( items, function( index, item ) {
if ( item.category != currentCategory ) {

ul.append( "<div class='ui-autocomplete-category'>" + item.category + "</div>");
currentCategory = item.category;

}

self._renderItem( ul, item );
});

/* This is how I thought it would work */

ul.find('.ui-autocomplete-category').each(function() {
$(this).nextUntil('div')
.andSelf()
.wrapAll('<div class="ui-block">')
.nextUntil('div')
.wrapAll('<div class="ui-list">');
});

},

_renderItem: function( ul, item) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>" + item.label + "</a>" )
.appendTo( ul );
},
});

$(function() {
$( "#ui-autocomplete-input" ).catcomplete({
source: '<?php echo SITEURL?>/users/complete/',
delay: 0,
autoFocus: true,
select: function(event, ui) {
if(ui.item)
{
$('#ui-autocomplete-input').attr('value',ui.item.value);
}
$('#ui-autocomplete-form').submit();
}
});
});

所以基本上,select: function 部分根本不起作用。

谁能帮我解决这个问题吗?

我确信有一种更简单的方法来修改默认标记并使其正常工作。

这就是我想要的样子:

Screenshot of drop-down list with multiple rows and header on left

最佳答案

我最终自己找到了解决方案,它涉及一些 CSS 技巧和一些简单的 jQuery。

CSS:

.ui-autocomplete {
width:424px;
margin:0;
padding:0 0 14px 0;
}

.ui-autocomplete-category {
width:100px;
position: absolute;
padding:0 20px;
margin:20px 0 0 0;
}

.ui-menu-item {
padding-left:140px;
}

.ui-first {
padding-top:20px;
}

jQuery:

$( "#search" ).catcomplete({
delay: 0,
source: data,
autoFocus: true,
select: function(event, ui) {
if(ui.item) { $('#search').attr('value',ui.item.value);}
$('#form').submit();
},

/* This is the important part! */

open: function() {
$('.ui-autocomplete-category').next('.ui-menu-item').addClass('ui-first');
}
});

基本上,我使用绝对定位将类别名称放在左侧,并使用 jQuery 将类添加到第一个 LI 元素,以便使用 PADDING 创建一些间距。

它并不完美,但它可以完美地工作:)

关于jQuery UI 自动完成自定义标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8567606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com