我正在编写一个脚本,onload将向12个DIV中的任意4个添加类,然后从数组中删除DIV的ID。

我有一个包含所有12个DIV ID的阵列设置。

有时,当我重新加载页面时,有4个DIV具有该类,而有时只有3个DIV具有该类。

金达坚持说为什么会这样。我注释掉了从数组代码中删除,以查看是否是问题所在,但仍然是同样的问题。

这是我的代码:

//Randomize Which Shoes Are Positive And Negative
function randomizeShoes(){
    allGroundShoes = new Array('ground_black_1','ground_black_2','ground_brown_1','ground_brown_2','ground_clown_1','ground_clown_2','ground_disco_1','ground_disco_2','ground_moccasins_1','ground_moccasins_2','ground_red_1','ground_red_2');
    for(var i=0; i < 4; i++){
        randomAllGroundShoes = allGroundShoes[Math.floor(Math.random() * allGroundShoes.length)];
        $('#'+randomAllGroundShoes+'').addClass('shoeNegitive');
        //randomShoeID = allGroundShoes.indexOf('randomAllGroundShoes');
        //if(randomShoeID != -1){ allGroundShoes.splice(randomShoeID, 1); }
    }
}

最佳答案

删除找到的元素时,将传递字符串文字而不是变量名称:

allGroundShoes.indexOf('randomAllGroundShoes');


由于没有元素'randomAllGroundShoes',因此永远不会找到该元素,也不会从数组中删除任何元素。

它应该是:

allGroundShoes.indexOf(randomAllGroundShoes);


但是,您做同一件事不止一次。您根本不需要检查allGroundShoes.indexOf()。您可以将随机数存储在变量中,然后再次引用它。但是,这甚至超出了您的需要。只需致电splice()即可获得您的价值:

randomAllGroundShoes = allGroundShoes.splice(
    Math.floor(Math.random() * allGroundShoes.length), 1)[0];
$('#'+randomAllGroundShoes).addClass('shoeNegitive');


这样,您只需一步即可检索值并将其从数组中删除-无需其他查找。

jsfiddle.net/kRNTg

08-05 01:07