Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery/Javascript中生成的几个问题_Javascript_Jquery_Checkbox_Jquery Autocomplete - Fatal编程技术网

在jQuery/Javascript中生成的几个问题

在jQuery/Javascript中生成的几个问题,javascript,jquery,checkbox,jquery-autocomplete,Javascript,Jquery,Checkbox,Jquery Autocomplete,我的javascript还不是很好,所以我需要一些帮助。我开始使用jQuery Autosuggest插件,它允许我添加标记(有点像stackoverflow标记)。我想做的是,为每个选中的标记生成一个复选框。出于这个原因,我修改了插件,使其将每个标记名包装在一个标记名,这样更容易获得标记,我这样做:$(“.tag”).attr(“class”).replace(“tag”,”)。无论如何,我已经编写了一个脚本,它生成了一个复选框,但问题是,它只为第一个标记生成一个复选框,并且每2秒生成一个复选

我的javascript还不是很好,所以我需要一些帮助。我开始使用jQuery Autosuggest插件,它允许我添加标记(有点像stackoverflow标记)。我想做的是,为每个选中的标记生成一个复选框。出于这个原因,我修改了插件,使其将每个标记名包装在一个
标记名
,这样更容易获得标记,我这样做:
$(“.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)
完成计时。