我在javascript中不是很好,所以我需要一些帮助。我开始使用jQuery Autosuggest插件,它允许我添加标签(有点像stackoverflow标签)。我想要做的是,为每个选定的标签生成一个复选框。出于这个原因,我修改了插件,因此它将每个标记名称包装在<span class="tag tag_name">tag_name</span>
中,因此更容易获取标记,我喜欢这样:$(".tag").attr("class").replace("tag ", "");
。无论如何,我已经编写了一个生成复选框的脚本,但问题是,它只为第一个标记生成一个复选框,并且每2秒生成一次。另外,我担心剧本在演奏上可能有点太多了?这是脚本:
$(document).ready(function(){
var done = {};
$("input[type=text]").autoSuggest("get.php", {searchObjProps:"name", selectedItemProp:"name", asHtmlID: "1"});
var timer = setInterval(function(){
if(!done[city]){
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
done[city] = true;
}
var nr = 0;
$.each(done, function(i, j){
if(j != 2){
var tmp = $('<input type="checkbox" value="'+nr+'" name="city[]">'+i+'<br />');
$("#checkboxes").append(tmp);
j = 2;
nr++;
}
});
},2000);
});
任何帮助将不胜感激!
答案 0 :(得分:2)
在你的剧本的这一行:
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
您正在调用.replace()
删除类名,但不会将其分配回任何内容,因此实际上没有任何更改。 .replace()
返回被替换的字符串 - 它不会修改传入的字符串。
要实际更改类名,并在下次定时器触发时前进到下一个城市,您必须使用以下内容:
var firstCity = $(".mestoJe").get(0);
var city = firstCity.className = firstCity.className.replace("mestoJe", "");
如果您不更改班级名称,那么这行代码每次都会生成完全相同的结果和完全相同的城市名称:
var city = $(".mestoJe").attr("class").replace("mestoJe", "");
此外,你正在开始一个2秒钟的内部计时器,并且从不停止它,所以它会永远持续下去。
您也在引用:
if(!done[city]){
在您定义city
之前。