4

我需要一些关于下面代码的帮助。

$("#auto_cp").autocomplete({
    minLength: 3,
    //source
    source: function(req, add) {
        $.getJSON("friends.php?callback=?", req, function(data) {
            var suggestions = [];
            $.each(data, function(i, val) {
                suggestions.push(val.name);
            });
            add(suggestions);
        });
    },
    //select
    select: function(e, ui) {
        alert(ui.item.value);
    }
});​

使用 FireBug,我在控制台中得到了这个:

jQuery171003666625335785867_1337116004522([{"name":"97300 Cayenne","zzz":"203"},{"name":"97311 Roura","zzz":"201"},{"name":"97312 Saint Elie ","zzz":"388"},{"name":"97320 Saint Laurent du Maroni","zzz":"391"},{"name":"97351 Matoury","zzz":"52" },{"name":"97354 Remire MontJoly Cayenne","zzz":"69"},{"name":"97355 Macouria Tonate","zzz":"449"}])

一切工作都很好,但我不知道如何在选定项目上获取 'zzz' 的值。

我试过了

alert(ui.item.zzz);

但它不起作用。

4

3 回答 3

6

自动完成小部件需要一个数组格式的数据源,其中之一是:

  • 包含标签属性、属性或两者的对象
  • 简单的字符串值

您当前正在构建第二个(字符串值数组),它工作正常,但您也可以在迭代数据时稍微调整数据并提供对象中的其他属性:

$("#auto_cp").autocomplete({
    minLength: 3,
    //source
    source: function(req, add) {
        $.getJSON("friends.php?callback=?", req, function(data) {
            var suggestions = [];
            $.each(data, function(i, val) {
                suggestions.push({
                    label: val.name,
                    zzz: val.zzz
                });
            });
            add(suggestions);
        });
    },
    //select
    select: function(e, ui) {
        alert(ui.item.zzz);
    }
});​

现在,由于您为小部件提供的数组包含具有name属性的对象,因此您应该获得自动完成功能并获得对该zzz属性的访问权限。

这是一个工作示例(没有 AJAX 调用):http: //jsfiddle.net/LY42X/

于 2012-05-15T22:55:23.357 回答
2

您的源函数仅填充名称。如果您想要该数据结构中的所有内容,请执行以下操作:

$("#auto_cp").autocomplete({
    minLength: 3,
    //source
    source: function(req, add) {
        $.getJSON("friends.php?callback=?", req, function(data) {
            var suggestions = [];
            $.each(data, function(i, val) {
                suggestions.push(val); //not val.name
            });
            add(suggestions);
        });
    },
    //select
    select: function(e, ui) {
        alert(ui.item.value.zzz);
    }
});​
于 2012-05-15T21:39:58.283 回答
0

这似乎是一个对象数组......您可能缺少的是“[0]”或一般的“[index]”。

请检查:jqueryui.com/demos/autocomplete/#event-select

于 2012-05-15T21:43:38.713 回答