不一致的Javascript行为(嵌套在while循环中的IF语句)
Inconsistent Javascript behaviour (IF statement nested in while loop)
我正在尝试编写一个简单的Javascript(jQuery)函数,该函数可以随机显示可能的11个div中的6个div。代码是可行的,它确实随机显示了大约一半的Div,但它在4到8之间变化。
有人能告诉我哪里出了问题吗?看起来应该这么简单,但我完全迷路了!
我的代码:
<div class="offer">Offer 1</div>
<div class="offer">Offer 2</div>
... snip
<div class="offer">Offer 11</div>
<script src="query.min.js" type="text/javascript"></script>
<script>
var changed = 0;
while (changed < 6) {
$('.offer').each(function(index) {
if (changed < 6) {
var showOrNot = Math.floor(Math.random() * 2);
if (showOrNot == 1) {
$(this).addClass('offershow');
changed += 1;
$(this).text(changed); //debugging looking for the current value of changed
}
}
})
}
</script>
目前的问题是,您有很多不相关的尝试。如果你有一个有11个球的桶,并且有50%的机会取出每个球,那么你最终可能会得到0到11之间的任意数量的球。概率是向中心倾斜的,但你不会得到六个,每次都是六个。
你想要的是去掉六个,确切地说是六个,任意选择的球。
试试类似的东西:
var offers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
for (var i = 0; i < 6; i += 1) {
// choose a remaining offer at random
var index = Math.floor(Math.random() * offers.length);
// retrieve the item being shown
var item = $('.offer').eq(offers[index]);
item.addClass('offerShow');
// remove this offer from the list of possibilities
offers.splice(index, 1);
}
编辑:在评论中,OP澄清说,他真正想要的是接受一份任意大小的报价清单,并显示其中六份。下面提供的代码解决了需要的问题,而不是原始问题中的严格要求。我留下原始代码以供参考。
var OFFERS_TO_SHOW = 6; // config, of sorts
// make sure no offers are shown now
$('.offer').removeClass('offerShow');
// show offers selected at random
for (var i = 0; i < OFFERS_TO_SHOW; i += 1) {
// get a list of offers not already being shown
var candidates = $('.offer').not('.offerShow');
// select one from this list at random
var index = Math.floor(Math.random() * offers.length);
// show this offer by adding the offerShow class
candidates.eq(index).addClass('.offerShow');
}
我认为问题在于您没有排除已经设置为显示的div。因此,选择下一个要显示的div的代码可能是选择一个已经显示的div。这有道理吗?正在尝试更改选择器。。。。。
$('.offer').not('.offershow').each(........
请记住,addClass不会删除现有的类,因此即使添加了offershow类,原始选择器仍然会被证明是正确的。
您实际上并没有检查所选div是否已经显示。这意味着当您循环遍历所有div时,总是有可能将一个div设置为可见两次。脚本现在认为这是一个新的脚本,并设置更改的+=1;
试着添加这样的东西:
if(!$(this).hasClass('offershow')) {
[[rest of code here]]
}
相关文章:
- for循环中的javascript if语句找不到==
- 循环通过数组的If语句不起作用
- Knockout.js中带有if:子句的嵌套循环
- 使用if语句重新循环
- for 循环和 if 语句,获取变量并存储它
- 使用javascript中的for循环和if语句
- for循环与if条件
- Javascript:用if语句运行while循环,用子句随机生成内容
- 在 for 循环中使用 if 语句
- 识别两个文本中的单词(if 语句在 for 循环中)
- for 循环中的 if 语句
- Javascript if-else循环不起作用
- 嵌套在WHILE循环中的IF语句的结果混淆了我(Javascript)
- 当if条件被添加到循环中时,Javascript函数将停止工作
- JavaScript 循环 if 语句由 5 秒
- JQuery可替代classic for循环if not collection
- For循环if语句混淆
- Kendo网格模板For循环If Else函数
- 如何循环if/else语句(JavaScript)
- for循环if语句未进入