你知道为什么为我的下拉框引入jquery ui自动完成也会改变我的列表框吗?

你知道为什么为我的下拉框引入jquery ui自动完成也会改变我的列表框吗?,jquery,asp.net-mvc,jquery-ui,listbox,jquery-autocomplete,Jquery,Asp.net Mvc,Jquery Ui,Listbox,Jquery Autocomplete,我正在尝试将我的组合框更改为使用autocomplete,以便利用它(这对我的下拉列表非常有效) 问题是,我在同一页上还有一个列表框,其中包含以下代码: <%= Html.ListBox("Cars", Model.BodyParts.Select( x => new SelectListItem { Text = x.Name, Value = x

我正在尝试将我的组合框更改为使用autocomplete,以便利用它(这对我的下拉列表非常有效)

问题是,我在同一页上还有一个列表框,其中包含以下代码:

<%= Html.ListBox("Cars", Model.BodyParts.Select(
                    x => new SelectListItem {
                        Text = x.Name,
                        Value = x.Id,
                        Selected = Model.CarsSelected.Any(y => y.Id == x.Id)
                    }
               ))%>
新建SelectListItem{
Text=x.名称,
值=x.Id,
Selected=Model.CarsSelected.Any(y=>y.Id==x.Id)
}
))%>
jQueryUI代码似乎也将其更改为自动完成下拉列表(而不是将其保留为多选列表框)

你知道如何防止这种情况发生吗

我实际上只是在使用准确的代码


(函数($){
$.widget(“ui.combobox”{
_创建:函数(){
var self=这个;
var select=this.element.hide();
变量输入=$(“”)
.insertAfter(选择)
.自动完成({
来源:功能(请求、响应){
var matcher=new RegExp(request.term,“i”);
响应(select.children(“option”).map(函数(){
var text=$(this.text();
if(!request.term | | matcher.test(text))
返回{
id:$(this.val(),
标签:text.replace(新RegExp((?![^&;]+;)(?!(?![^&;]+;)),“gi”),“$1”,
值:文本
};
}));
},
延迟:0,
选择:功能(e、ui){
如果(!ui.item){
//删除无效值,因为它与任何内容都不匹配
$(此).val(“”);
返回false;
}
$(this.focus();
选择.val(ui.item.id);
自触发(“选定”,空{
项:选择.find(“[value=”+ui.item.id+“]”)
});
},
最小长度:0
})
.addClass(“ui小部件ui小部件内容ui左角”);
$(" ")
.insertAfter(输入)
.按钮({
图标:{
主要:“ui-icon-triangle-1-s”
},
文本:false
}).removeClass(“用户界面角全部”)
.addClass(“ui右角ui按钮图标”)
.职位({
我的:“左中锋”,
在“右中”,
其中:投入,,
偏移量:“-10”
}).css(“顶部”、“顶部”)
。单击(函数(){
//如果已经可见,请关闭
如果(input.autocomplete(“小部件”)为(“:可见”)){
输入。自动完成(“关闭”);
返回;
}
//将空字符串作为要搜索的值传递,显示所有结果
input.autocomplete(“搜索”和“);
input.focus();
});
}
});
})(jQuery);
$(函数(){
$(“选择”).combobox();
});

我猜您的JQuery选择器(您的问题中没有提供)正在抓取页面上的所有下拉列表。您应该考虑使其更加具体,很可能是通过ID引用元素。JQuery文档中有很多很好的例子:


如果只有一个下拉列表可供选择,请务必使用id。然而,他似乎希望选择多个下拉列表,从而使类名成为更好的解决方案。但是我当然同意这是一个过分热心的选择器的错误。@geowa4-我已经更新了这个问题,以显示我在jquery上直接使用的javascript代码site@NealSwearer-我已经更新了这个问题,以显示我在jquery站点上直接使用的javascript代码。下面第三行是您的问题那个JQuery选择器$(“选择”)。。。将获取页面上的所有HTML Select控件。谢谢。我将其更改为类选择器,这样就解决了问题
<script type="text/javascript">
(function($) {
    $.widget("ui.combobox", {
        _create: function() {
            var self = this;
            var select = this.element.hide();
            var input = $("<input>")
                .insertAfter(select)
                .autocomplete({
                    source: function(request, response) {
                        var matcher = new RegExp(request.term, "i");
                        response(select.children("option").map(function() {
                            var text = $(this).text();
                            if (!request.term || matcher.test(text))
                                return {
                                    id: $(this).val(),
                                    label: text.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + request.term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>"),
                                    value: text
                                };
                        }));
                    },
                    delay: 0,
                    select: function(e, ui) {
                        if (!ui.item) {
                            // remove invalid value, as it didn't match anything
                            $(this).val("");
                            return false;
                        }
                        $(this).focus();
                        select.val(ui.item.id);
                        self._trigger("selected", null, {
                            item: select.find("[value='" + ui.item.id + "']")
                        });

                    },
                    minLength: 0
                })
                .addClass("ui-widget ui-widget-content ui-corner-left");
            $("<button>&nbsp;</button>")
            .insertAfter(input)
            .button({
                icons: {
                    primary: "ui-icon-triangle-1-s"
                },
                text: false
            }).removeClass("ui-corner-all")
            .addClass("ui-corner-right ui-button-icon")
            .position({
                my: "left center",
                at: "right center",
                of: input,
                offset: "-1 0"
            }).css("top", "")
            .click(function() {
                // close if already visible
                if (input.autocomplete("widget").is(":visible")) {
                    input.autocomplete("close");
                    return;
                }
                // pass empty string as value to search for, displaying all results
                input.autocomplete("search", "");
                input.focus();
            });
        }
    });

})(jQuery);

$(function() {
    $("select").combobox();
});
</script>