Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Javascript 无法使div id消失_Javascript_Jquery - Fatal编程技术网

Javascript 无法使div id消失

Javascript 无法使div id消失,javascript,jquery,Javascript,Jquery,Javascript新手,这一点让我有点困扰。我基本上是想做一个打鼹鼠的游戏。一旦我添加了图像,我想一个接一个地删除它们。我想我添加了唯一的ID,但是当我添加图像删除时,一切都停止了。我做错了什么?我还想找到.remove之外的其他项,但我不确定代码的这部分称为方法、函数等。下面是我的代码 function addMole(){ var xPos = randomPosX(); var yPos = randomPosY(); va

Javascript新手,这一点让我有点困扰。我基本上是想做一个打鼹鼠的游戏。一旦我添加了图像,我想一个接一个地删除它们。我想我添加了唯一的ID,但是当我添加图像删除时,一切都停止了。我做错了什么?我还想找到.remove之外的其他项,但我不确定代码的这部分称为方法、函数等。下面是我的代码

        function addMole(){
        var xPos = randomPosX();
        var yPos = randomPosY();
        var count=0;
        $("#gamespace").append('<img src="img/roach.png" style="left: '+xPos+'px; top: '+yPos+'px;" id="img'+count+'"/>');
        var r=Math.floor(Math.random()*2000);
        t=setTimeout("addMole();", r);
        $("#gamespace").remove("img'+count+'"").removeAttribute(img'+count+'");
        count++;            
    }

您有一些无效的报价:

function addMole(){
    var xPos = randomPosX();
    var yPos = randomPosY();
    var count=0;
    $("#gamespace").append('<img src="img/roach.png" style="left: '+xPos+'px; top:' + yPos + 'px;" id="img'+count+'"/>');
    var r=Math.floor(Math.random()*2000);
    t = setTimeout(addMole, r);//is t defined already?
    $("#gamespace").remove("#img" + count).removeAttribute("img" + count);//why you need removeAttribute
    count++;            
}

所有内容都停止工作,因为此行不是有效的JavaScript:

$("#gamespace").remove("img'+count+'"").removeAttribute(img'+count+'");
检查您的报价:而“…”和。。。是可互换的,单个和“不”是可互换的

另一个问题是,在修复上述问题后,您的代码逻辑无法实现:您正在添加一个图像,然后立即将其删除。我不太清楚你想做什么,所以我不能为你重写它;我所能做的就是告诉您更详细地定义流程

最后,当您以编程方式创建元素时,保留元素引用而不是混乱地使用ID通常会更好、更不容易出错

var $gamespace = $('#gamespace');
var $img = $('<img>').css({
  left: left,
  top: top
}).appendTo($gamespace);

// ...

$img.remove();
使用

而不是

$("#gamespace").remove("img'+count+'"").removeAttribute(img'+count+'");
或者。。虽然图像ID是唯一的,但您可以直接使用

$("#img'"+count+"'").remove();
将计数声明移到函数之外。。。每次运行时都会重置为0

此外,将添加300到您的随机数删除,所以它将显示在弹性1/3秒。。。除此之外,您还可以直接在setTimeoutaddMole,r;中引用函数。。。您正在创建一个不需要的额外包装

var count = -1; //first is 1
function addMole(){
    count++;
    var rnd;
    var xPos = randomPosX();
    var yPos = randomPosY();
    var img = $('<img src="img/roach.png" />')
        .css({left:xPos,top:yPos})
        .addClass('mole')
        .attr('id','img'+count);
    img.click(addPoints);
    $('#gamespace').append(img);

    //remove image at random interval
    rnd = 300 + Math.floor(Math.random() * 2000);
    setTimeout(removeImageShim(img),rnd);

    //add next mole at random interval
    rnd = Math.floor(Math.random() * 2000);
    setTimeout(addMole, rnd);
}

function addPoints() {
    //TODO: addPoints
    $(this).remove();
}

function removeImageShim(img) {
    return function(){
      img.remove();
    }
}

@是的,当然。考虑到这个函数的上下文,我相信t可能是在其他地方定义的,因为它没有在这个函数中使用。@PatrickRoberts快速提问:如果addMole有一个参数addMolea呢?setTimeoutfunction{addMolea;},r;因为addmole是一个函数。。。你可以做。。。setTimeoutaddMole,我会给你的随机数加上300,这样它看起来至少足够长,可以保持可见…或者他可以切换计数++和$…删除…?哇。实际上,它本身就是一条双线。我想我可能已经看了这么久了。我想使用id,因为我想对所有图像进行添加/删除操作,但不是同时随机添加/删除。然后将引用存储到数组中,或者其他什么。更不容易失败。正如我所说,我不知道你在玩什么游戏。这不是包装,只是纯粹的评估@帕特里克·罗伯茨我知道。。。无论哪种情况,它都会创建一个不必要的引用并评估执行,而不仅仅是对现有方法的引用。。。无论哪种方式,问题的根源都是在函数内部声明了count。
var count = -1; //first is 1
function addMole(){
    count++;
    var rnd;
    var xPos = randomPosX();
    var yPos = randomPosY();
    var img = $('<img src="img/roach.png" />')
        .css({left:xPos,top:yPos})
        .addClass('mole')
        .attr('id','img'+count);
    img.click(addPoints);
    $('#gamespace').append(img);

    //remove image at random interval
    rnd = 300 + Math.floor(Math.random() * 2000);
    setTimeout(removeImageShim(img),rnd);

    //add next mole at random interval
    rnd = Math.floor(Math.random() * 2000);
    setTimeout(addMole, rnd);
}

function addPoints() {
    //TODO: addPoints
    $(this).remove();
}

function removeImageShim(img) {
    return function(){
      img.remove();
    }
}