自动填充应用值而非标签到文本框

Div*_*Dan 85 asp.net-mvc jquery jquery-ui autocomplete jquery-ui-autocomplete

我有麻烦试图让自动完成工作正常.

这一切看起来都不错,但......

<script>
$(function () {
    $("#customer-search").autocomplete({
        source: 'Customer/GetCustomerByName',
        minLength: 3,
        select: function (event, ui) {
            $("#customer-search").val(ui.item.label);
            $("#selected-customer").val(ui.item.label);
        }
    });
});
</script>
<div>
<input id="customer-search" />
 </div>
@Html.Hidden("selected-customer")
Run Code Online (Sandbox Code Playgroud)

但是,当我从下拉列表中选择一个项目时,该值已应用于文本框而不是标签.

我做错了什么?

如果我使用firebug查看源代码,我可以看到我的隐藏字段正在正确更新.

And*_*ker 205

select事件的默认行为是更新inputwith ui.item.value.此代码事件处理程序之后运行.

只需返回false或致电event.preventDefault()以防止这种情况发生.我还建议为focus事件做类似的事情,以防止ui.item.value被放置在input用户将鼠标悬停在选项上时:

$("#customer-search").autocomplete({
    /* snip */
    select: function(event, ui) {
        event.preventDefault();
        $("#customer-search").val(ui.item.label);
        $("#selected-customer").val(ui.item.label);
    },
    focus: function(event, ui) {
        event.preventDefault();
        $("#customer-search").val(ui.item.label);
    }
});
Run Code Online (Sandbox Code Playgroud)

示例: http ://jsfiddle.net/andrewwhitaker/LCv8L/


Vla*_*lad 15

只是想添加一下,而不是通过selectfocus回调函数中的"id"引用input元素,你可以使用这个选择器,如:

$(this).val(ui.item.label);
Run Code Online (Sandbox Code Playgroud)

当您为多个元素分配自动完成时,它很有用,即按类:

$(".className").autocomplete({
...
    focus: function(event, ui) {
        event.preventDefault();
        $(this).val(ui.item.label);
    }
});
Run Code Online (Sandbox Code Playgroud)


Yan*_*ang 8

在我的情况下,我需要在隐藏的输入中记录另一个字段'id'.所以我在ajax调用返回的数据中添加了另一个字段.

{label:"Name", value:"Value", id:"1"}
Run Code Online (Sandbox Code Playgroud)

并在列表底部添加了"创建新"链接.单击"创建新",将弹出一个模态,您可以从那里创建新项目.

$('#vendorName').autocomplete
    (
        {
            source: "/Vendors/Search",
            minLength: 2,
            response: function (event, ui)
            {
                ui.content.push
                ({
                    label: 'Add a new Name',
                    value: 'Add a new Name'
                });
            },
            select: function (event, ui)
            {
                $('#vendorId').val(ui.item.id);
            },
            open: function (event, ui)
            {
                var createNewVendor = function () {
                    alert("Create new");
                }
                $(".ui-autocomplete").find("a").last().attr('data-toggle', 'modal').addClass('highLight');
                $(".ui-autocomplete").find("a").last().attr('href', '#modal-form').addClass('highLight');
            }
        }
    );
Run Code Online (Sandbox Code Playgroud)

我认为关键是你可以添加除'label'和'value'之外的任何额外数据字段.

我使用bootstrap模态,它可以如下所示:

<div id="modal-form" class="modal fade" aria-hidden="true">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-body">
            <div class="row">

            </div>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)