0

我已经阅读了一堆关于使用 _renderItem 修改自动完成下拉响应的 SO 答案,并从中复制了一些代码。但它不起作用,我不知道为什么。

下面的代码是一个简化的概念测试。当输入某些大城市时,我想更改城市响应(来自 geonames.org)并提供该城市的行政区/区域的响应。概念测试只是将“New York”更改为“Bronx, New York, Bronx County, New York”,并带有用于 Bronx 和现有数据元素的文本字符串。这最终会变得更加复杂,但我只想先了解基础知识。

Geonames.org 在输入前几个字母时会提供“纽约”,但不会发生覆盖更改,并且不会触发警报。我也收到 Firebug 错误 - ReferenceError: item is not defined }).data("item.autocomplete", item)._renderItem= 虽然我在很多示例中看​​到 .data("item.autocomplete", item),但这个产生一个错误,当我修改更改时,错误只会改变。这里有些东西我不明白。至少出现 2 个症状 - Firebug 未定义错误,以及 if 语句未执行的事实。

代码如下。应该改变什么?

$("#city3").autocomplete({
    source: function (request, response){
        //some lines omitted
        $.ajax(
            success: function (data){
                response( $.map(data.geonames, function (item){
                    return {
                        label: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : "") + ", " + item.countryName,
                        value: item.name + (item.adminName2 ? ", " + item.adminName2 : "") + (item.adminName1 ? ", " + item.adminName1 : ""),
                        county: item.adminName2
                        }
                    }));
            }
        //some lines omitted
}).data("item.autocomplete", item)._renderItem=
    function(ul,item){
    //simple test
        if(item.label=="New York"){
            alert("NYC triggered");
            var replaceItem = $("<li></li>")
                .data("item.autocomplete", item)
                .append("<a>"+"Bronx"+item.label+"Bronx County"+item.adminName1+"</a>");
                return replaceItem.appendTo(ul);
        }else{
        return item.label;
        }
    };
4

0 回答 0