带有项目和 id 的 jQuery UI 自动完成

IT技术 javascript jquery arrays jquery-ui jquery-ui-autocomplete
2021-03-09 20:04:24

我有以下脚本可用于一维数组。是否有可能让它与二维数组一起工作?然后无论选择哪个项目,通过单击页面上的第二个按钮,都应显示所选项目的 id。

这是具有一维数组的脚本:

var $local_source = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"];
$("#txtAllowSearch").autocomplete({
    source: $local_source
});

这是按钮检查id的脚本,不完整:

$('#button').click(function() {
    // alert($("#txtAllowSearch").someone_get_id_of_selected_item);
});
6个回答

您需要使用 ui.item.label(文本)和 ui.item.value(id)属性

$('#selector').autocomplete({
    source: url,
    select: function (event, ui) {
        $("#txtAllowSearch").val(ui.item.label); // display the selected text
        $("#txtAllowSearchID").val(ui.item.value); // save selected id to hidden input
    }
});

$('#button').click(function() {
    alert($("#txtAllowSearchID").val()); // get the id from the hidden input
}); 

[编辑]您还询问了如何创建多维数组...

您应该能够像这样创建数组:

var $local_source = [[0,"c++"], [1,"java"], [2,"php"], [3,"coldfusion"], 
                     [4,"javascript"], [5,"asp"], [6,"ruby"]];

在此处阅读有关如何使用多维数组的更多信息:http : //www.javascriptkit.com/javatutors/literal-notation2.shtml

所以如果没有隐藏的输入,这是不可能的吗?
2021-04-22 20:04:24
让它工作,必须使用 value 和 id,并且必须使用带有标签 value 和 id 的 Salman 样式数组。
2021-04-26 20:04:24
我尝试了标签和值,但没有任何区别,当我在#txtAllowSearch 中输入内容时,我仍然得到一个空白的下拉列表。但是,如果我使用 Salman A 提到的数组样式,我不会得到一个空白的下拉列表,但是我最终遇到了将 id 插入 #txtAllowSearch 而不是值的问题。
2021-05-01 20:04:24
不,因为有两部分数据:文本和 id。您不能将两者都放入一个输入中。而且您通常不想向用户显示 id,因此需要输入 type="hidden" 才能进入。
2021-05-02 20:04:24
我试过这个脚本,当我在#txtAllowSearch 输入字段中输入一些东西时,我只是得到一个空白的下拉列表。
2021-05-09 20:04:24

从 jQuery 自动完成插件的概览选项卡:

本地数据可以是一个简单的字符串数组,或者它包含数组中每个项目的对象,带有标签或值属性或两者兼而有之。label 属性显示在建议菜单中。在用户从菜单中选择某些内容后,该值将被插入到 input 元素中。如果只指定了一个属性,它将用于两者,例如。如果您仅提供 value-properties,则该值也将用作标签。

所以你的“二维”数组可能看起来像:

var $local_source = [{
    value: 1,
    label: "c++"
}, {
    value: 2,
    label: "java"
}, {
    value: 3,
    label: "php"
}, {
    value: 4,
    label: "coldfusion"
}, {
    value: 5,
    label: "javascript"
}, {
    value: 6,
    label: "asp"
}, {
    value: 7,
    label: "ruby"
}];

您可以通过使用and参数访问focusselectevent 中的 label 和 value 属性uiui.item.labelui.item.value

编辑

似乎您必须“取消”焦点并选择事件,以便它不会将 ID 编号放在文本框中。这样做时,您可以复制隐藏变量中的值。这是一个例子

#txtAllowSearch 在一个<input type="text" name="xxx">字段中,是吗?如果是这样,那么$("#txtAllowSearch").val()会给你 id 号,而不是标签文本,因为用户已经输入了一些东西。
2021-04-30 20:04:24
是否有可能使用<select>元素代替?
2021-05-05 20:04:24
问题是,如果我使用上面的数组,当我从自动完成输入字段中单击一个项目时,它会将值放入 #txtAllowSearch 字段而不是标签中。
2021-05-12 20:04:24
是的,只要我可以使用自动完成就可以了吗?
2021-05-12 20:04:24
那么如果不使用隐藏的输入字段,这是不可能的吗?
2021-05-14 20:04:24

我的代码仅在我将“返回假”添加到选择函数时才起作用。如果没有这个,输入在 select 函数中设置了正确的值,然后在 select 函数结束后将其设置为 id 值。return false 解决了这个问题。

$('#sistema_select').autocomplete({

    minLength: 3,
    source: <?php echo $lista_sistemas;?> ,
    select: function (event, ui) {
         $('#sistema_select').val(ui.item.label); // display the selected text
         $('#sistema_select_id').val(ui.item.value); // save selected id to hidden input
         return false;
     },
    change: function( event, ui ) {
        $( "#sistema_select_id" ).val( ui.item? ui.item.value : 0 );
    } 
});

此外,我在更改事件中添加了一个函数,因为如果用户在输入中写入内容或在选择一个项目后擦除项目标签的一部分,我需要更新隐藏字段,以便我不会得到错误(过时)的 ID。例如,如果我的来源是:

var $local_source = [
       {value: 1,  label: "c++"}, 
       {value: 2,  label: "java"}]

并且用户键入 ja 并选择带有自动完成功能的“java”选项,我将值 2 存储在隐藏字段中。如果用户从“java”中删除一个字母,例如在输入字段中以“jva”结尾,我无法将 id 2 传递给我的代码,因为用户更改了值。在这种情况下,我将 id 设置为 0。

同样的事情也发生在我身上。“返回假”成功了。谢谢。
2021-05-17 20:04:24

只是想分享对我有用的东西,以防万一它也能帮助别人。或者根据上面 Paty Lustosa 的回答,请允许我添加另一种源自该站点的方法,在该站点中,他对源方法使用了 ajax 方法

http://salman-w.blogspot.ca/2013/12/jquery-ui-autocomplete-examples.html#example-3

踢球者是来自您的 php 脚本(下面的 listing.php)的结果“字符串”或 json 格式,它派生出要在自动完成字段中显示的结果集,应遵循如下内容:

    {"list":[
     {"value": 1, "label": "abc"},
     {"value": 2, "label": "def"},
     {"value": 3, "label": "ghi"}
    ]}

然后在自动完成方法的源部分:

    source: function(request, response) {
        $.getJSON("listing.php", {
            term: request.term
        }, function(data) {                     
            var array = data.error ? [] : $.map(data.list, function(m) {
                return {
                    label: m.label,
                    value: m.value
                };
            });
            response(array);
        });
    },
    select: function (event, ui) {
        $("#autocomplete_field").val(ui.item.label); // display the selected text
        $("#field_id").val(ui.item.value); // save selected id to hidden input
        return false;
    }

希望这会有所帮助...一切顺利!

链接是完美的。选择标签后,我很难将标签保留在文本字段中,谢谢
2021-04-27 20:04:24

假设源数组中的对象具有 id 属性...

var $local_source = [
    { id: 1, value: "c++" },
    { id: 2, value: "java" },
    { id: 3, value: "php" },
    { id: 4, value: "coldfusion" },
    { id: 5, value: "javascript" },
    { id: 6, value: "asp" },
    { id: 7, value: "ruby" }];

获取当前实例并检查其 selectedItem 属性将允许您检索当前选择项的属性。在这种情况下,提醒所选项目的 id。

$('#button').click(function() {
    alert($("#txtAllowSearch").autocomplete("instance").selectedItem.id;
});