在jQuery/Javascript中生成的几个问题
我的javascript还不是很好,所以我需要一些帮助。我开始使用jQuery Autosuggest插件,它允许我添加标记(有点像stackoverflow标记)。我想做的是,为每个选中的标记生成一个复选框。出于这个原因,我修改了插件,使其将每个标记名包装在一个在jQuery/Javascript中生成的几个问题,javascript,jquery,checkbox,jquery-autocomplete,Javascript,Jquery,Checkbox,Jquery Autocomplete,我的javascript还不是很好,所以我需要一些帮助。我开始使用jQuery Autosuggest插件,它允许我添加标记(有点像stackoverflow标记)。我想做的是,为每个选中的标记生成一个复选框。出于这个原因,我修改了插件,使其将每个标记名包装在一个标记名,这样更容易获得标记,我这样做:$(“.tag”).attr(“class”).replace(“tag”,”)。无论如何,我已经编写了一个脚本,它生成了一个复选框,但问题是,它只为第一个标记生成一个复选框,并且每2秒生成一个复选
标记名,这样更容易获得标记,我这样做:$(“.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);
});
$(文档).ready(函数(){
var done={};
$(“input[type=text]”)autoSuggest(“get.php”,{searchObjProps:“name”,selectedItemProp:“name”,asHtmlID:“1”});
var timer=setInterval(函数(){
如果(!完成[城市]){
var city=$(“.mestoJe”).attr(“类”).replace(“mestoJe”);
完成[城市]=正确;
}
var-nr=0;
$。每个(完成,功能(i,j){
如果(j!=2){
var tmp=$(''+i+'
');
$(“#复选框”)。追加(tmp);
j=2;
nr++;
}
});
},2000);
});
任何帮助都将不胜感激 在脚本的这一行:
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秒的Interval计时器,并且从不停止它,因此它将永远持续下去
您还引用了:
if(!done[city]){
在你定义城市之前,实际上,这个类是这样的:city
,所以我从中得到了我想要的东西。这在一开始并不是问题。但是,你在每个计时器上重复调用它,每次都会得到完全相同的结果,因为你从不修改任何内容:var city=$(“.mestoJe”).attr(“class”).replace(“mestoJe”),”代码>天哪!我不明白你一开始说的话,我的错。我想我可以通过替换城市名称来存储城市名称。它实际上会生成所有的复选框,但不是只显示整个数组。为什么要在2秒的间隔计时器上永远添加复选框?为什么不把你想要的全部加起来,然后完成呢。为什么不在添加完所有复选框后停止计时器?我该怎么做?我真的很蠢:用clearInterval(timer)
完成计时。