Javascript中的意外标识符
我正在动态地向列表中添加内容,我希望能够防止添加重复内容。因此,在添加内容之前,我将选择所有列表,制作一个数组,并检查我添加的数据是否尚未包含在列表中。但是,我在代码中得到了一个意外的标识符。这是我的代码:Javascript中的意外标识符,javascript,jquery,Javascript,Jquery,我正在动态地向列表中添加内容,我希望能够防止添加重复内容。因此,在添加内容之前,我将选择所有列表,制作一个数组,并检查我添加的数据是否尚未包含在列表中。但是,我在代码中得到了一个意外的标识符。这是我的代码: $(".autocomp_centers").autocomplete({ var ids = new Array(); $("#sister-centers-list > li").each(function(index, value){ ids.pu
$(".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("");
}
});
$(“.autocomp\u中心”).autocomplete({
var id=新数组();
$(“#姐妹中心列表>li”)。每个(函数(索引,值){
id.push($(value.attr('class'));
console.log($(value.attr('class'));
});
服务URL:“/suggest_centers”,
最大高度:400,
宽度:252,
参数:{country:$(“#country”).val()},
明查斯:2,
onSelect:函数(值、数据){
if($.inArray(数据,ID)=-1){
警报(“已添加姐妹中心”);
}否则{
$(“#隐藏ID”).append(“”);
$(“#姐妹中心列表”).append(““+value+” ”);
}
$(“#姐妹搜索”).val(“”);
}
});
当用户开始键入并调用此方法时,我会获取列表值并将其存储在数组中。当他们选择一个值时,我检查该值是否已经在数组中。这是导致错误的行:
var ids=new Array()代码>您已经启动了一个对象文字,而它看起来像是要启动一个函数
{
var ids = new Array();
您可能想要:
function () {
var ids = new Array();
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("");
}
});
var id=new Array();
$(“#姐妹中心列表>li”)。每个(函数(索引,值){
id.push($(value.attr('class'));
console.log($(value.attr('class'));
});
$(“.autocomp\u中心”).autocomplete({
服务URL:“/suggest_centers”,
最大高度:400,
宽度:252,
参数:{country:$(“#country”).val()},
明查斯:2,
onSelect:函数(值、数据){
if($.inArray(数据,ID)=-1){
警报(“已添加姐妹中心”);
}否则{
$(“#隐藏ID”).append(“”);
$(“#姐妹中心列表”).append(““+value+” ”);
}
$(“#姐妹搜索”).val(“”);
}
});
当然,根据应用程序的功能,您可能需要进行更多更改。例如,如果在同一页面上有多个“自动完成”内容,则可能需要为每个内容使用单独的ID数组。等等。autocomplete需要一系列选项。您的ID声明和以下内容。每个都应该移出自动完成块。那么您建议我如何在每次触发自动完成时收集列表的内容?谢谢,我刚刚指出了你的代码有什么问题。如果此ID选择只需运行一次,请将其从autocomplete声明中移到您的document.readyAlso中,使用文本而不是构造函数var id=[]
@Amberlamps-这在很大程度上是一种风格选择,不会影响问题中描述的问题。我从来没有说过它会影响问题本身。你已经向他暗示了正确的方向。不过,加入一些最佳实践并没有什么坏处。大家好,我只需要一个数组变量来存储值。我现在使用varids=[],但仍然是一样的problem@Quentin--似乎是另一种情况:autocomplete需要对象,而程序失败是因为对象中存在语法错误的代码。我能够在onSelect函数中获取值。谢谢你的回复。