我正在动态地向列表添加内容,我希望能够阻止添加重复项。因此,在添加内容之前,我选择所有列表,创建一个数组并检查我添加的数据是否已包含在列表中。但是我的代码中有一个意外的标识符。这是我的代码:
$(".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();
答案 0 :(得分:1)
当你想要启动一个函数时,你已经启动了一个对象文字。
{
var ids = new Array();
你可能想要:
function () {
var ids = new Array();
答案 1 :(得分: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数组。等