2014-01-30 1 views
0

Я пытаюсь создать страницу с закладками, чтобы определить, какие варианты используются в кадре. Списки просто временны для меня, чтобы проверить, и предупреждение (finalchoice) также просто для меня, чтобы увидеть, что выплевывает в конце. Проблема в том, что, например, var finalchoice = 'choice0', а не «http://www.nordstrom.com». Я чувствую, что это простое исправление, но я не могу понять это.Флажки Javascript и случайный список, выводящий текст, а не переменную

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)  
} 

Heres 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> 

ответ

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); 

Проблема заключается в том, что, например, вар 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(), которую вы, вероятно, должны стараться избегать). Для этого мы используем массив с индексами.

Во-вторых, я переключил цикл и выбор [] объявлений - когда вы присваиваете значение переменной чему-либо, вы присваиваете только копию значения. Любые будущие изменения не изменят этого.

Также, пожалуйста, прочтите http://sscce.org/ и убедитесь, что код, который вы поставляете, на самом деле можно компилировать. Было много синтаксических и орфографических ошибок, а также некоторые отступы.

Смежные вопросы