0

我正在动态地将内容添加到列表中,并且我希望能够防止添加重复项。因此,在添加内容之前,我选择了所有列表,创建一个数组并检查我添加的数据是否已包含在列表中。但是,我的代码中出现了意外的标识符。这是我的代码:

$(".autocomp_centers").autocomplete({
    var ids = new Array();
    $("#sister-centers-list > li").each(function(index, value){
        ids.push($(value).attr('class'));
        console.log($(value).attr('class'));
    });

    serviceUrl:'/suggest_centers',
        maxHeight:400,
        width:252,
        params: {country: $("#country").val() },
        minChars:2,
        onSelect: function(value, data){
            if ($.inArray(data, ids) == -1){
                alert("Sister center has already been added.");
            }else{
                $("#hidden-ids").append('<input type="hidden" name="center_ids[]" value="' + data +'" class="center-' + data + '"/>');
                $('#sister-centers-list').append('<li class="center-' + data + '">' + value + ' <a href="#sister-center" class="remove-center-before-save" id="' + data + '">Remove</a></li>');
            }               
            $("#sister-search").val("");
        }
});

当此人开始输入并调用此方法时,我会获取列表值并将它们存储在一个数组中。当他们选择一个值时,我检查该值是否已经在数组中。这是导致错误的行:var ids = new Array();

4

2 回答 2

1

当您打算启动一个函数时,您已经启动了一个对象字面量。

{
    var ids = new Array();

你可能想要:

function () {
    var ids = new Array();
于 2013-01-09T10:30:39.290 回答
1

自动完成命令 ( http://api.jqueryui.com/autocomplete/ ) 需要一个对象作为参数——您不能直接在对象属性之间编写代码。

尝试这样的事情:

var ids = new Array();
$("#sister-centers-list > li").each(function(index, value){
    ids.push($(value).attr('class'));
    console.log($(value).attr('class'));
});

$(".autocomp_centers").autocomplete({
    serviceUrl:'/suggest_centers',
    maxHeight:400,
    width:252,
    params: {country: $("#country").val() },
    minChars:2,
    onSelect: function(value, data){
        if ($.inArray(data, ids) == -1){
            alert("Sister center has already been added.");
        }else{
            $("#hidden-ids").append('<input type="hidden" name="center_ids[]" value="' + data +'" class="center-' + data + '"/>');
            $('#sister-centers-list').append('<li class="center-' + data + '">' + value + ' <a href="#sister-center" class="remove-center-before-save" id="' + data + '">Remove</a></li>');
        }               
        $("#sister-search").val("");
    }
});

当然,根据您的应用程序的功能,您可能需要进行更多更改。例如,如果您在同一页面上有多个“自动完成”内容,您可能希望为每个内容使用单独的 ID 数组。等等。

于 2013-01-09T11:48:59.130 回答