我正在尝试使复选框页面确定框架中使用了哪些选项。这些列表对我来说只是暂时的测试,而警报(finalchoice)也只是让我看到最后吐出的东西。问题是,例如,var finalchoice ='choice0'而不是'http://www.nordstrom.com'。 我觉得这是一个简单的修复,但我无法弄明白。
function myfucntion(){
var final_list = []
var checkboxes = document.getElementsByClassName('c');
for (var i = 0; i < checkboxes.length; i++) {
final_list = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
final_list.push(['choice'+i]);
}
};
}
list0 = ['http://www.nordstrom.com','http://www.nordstom.com'];
list1 = ['http://www.bing.com','http://www.bing.com'];
list2 = ['http://www.yahoo.com','http://www.yahoo.com'];
list3 = ['http://www.amazon.com','http://www.amazon.com'];
var choice0 = list1[Math.floor(Math.random()*list1.length)];
var choice1 = list2[Math.floor(Math.random()*list2.length)];
var choice2 = list3[Math.floor(Math.random()*list3.length)];
var choice3 = list4[Math.floor(Math.random()*list4.length)];
var finalchoice = final_list[Math.floor(Math.random()*final_list.length)];
document.getElementById('window').src=finalchoice;
alert(finalchoice)
}
继承人html:
<div>
<button onclick="myfunction()">myfunction</button>
</div>
<div>
<input type="checkbox" class="c" />
<input type="checkbox" class="c" />
<input type="checkbox" class="c" />
<input type="checkbox" class="c" />
</div>
<iframe style="width:100%;height:500px" id="window" name="window" src="">
</iframe>
答案 0 :(得分:2)
for (var i = 0; i < checkboxes.length; i++) {
final_list = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
final_list.push(['choice'+i]);
}
}
}
这个嵌套循环完全是多余的,你可能会遇到一个copypaste错误?
var final_list = []
var checkboxes = document.getElementsByClassName('c');
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
final_list.push(['choice'+i]);
}
}
var finalchoice = final_list[Math.floor(Math.random()*final_list.length)];
document.getElementById('window').src=finalchoice;
alert(finalchoice);
问题是,例如,var finalchoice ='choice0'而不是'http://www.nordstrom.com'
final_list是一个字符串数组,例如['choice0','choice3','choice4'] - 不是变量。
即使您的问题措辞不当,我觉得您要做的就是将变量推送到final_list,以便以后修改它们。
function myfunction() {
list0 = ['http://www.nordstrom.com','http://www.nordstom.com'];
list1 = ['http://www.bing.com','http://www.bing.com'];
list2 = ['http://www.yahoo.com','http://www.yahoo.com'];
list3 = ['http://www.amazon.com','http://www.amazon.com'];
var choice = [];
choice[0] = list0[Math.floor(Math.random()*list0.length)];
choice[1] = list1[Math.floor(Math.random()*list1.length)];
choice[2] = list2[Math.floor(Math.random()*list2.length)];
choice[3] = list3[Math.floor(Math.random()*list3.length)];
var final_list = [];
var checkboxes = document.getElementsByClassName('c');
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
final_list.push(choice[i]);
}
}
var finalchoice = final_list[Math.floor(Math.random()*final_list.length)];
document.getElementById('window').src=finalchoice;
alert(finalchoice);
}
编辑:为您的利益做出一些解释。 首先,您最初尝试将字符串推送到final_list。字符串不能也不能转换为类似命名的变量(不使用eval(),你可能应该尝试避免)。为了解决这个问题,我们使用带索引的数组。
其次我交换了循环和choice []声明 - 当你将变量的值赋值给你时,你只分配了一个值的副本。任何未来的变化都不会改变它。
另外,请阅读http://sscce.org/并确保您提供的代码实际上是可编辑的。有许多语法和拼写错误以及一些缩进问题。