Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение имени и выполнение функции в цикле (https://javascript.ru/forum/misc/13553-izmenenie-imeni-i-vypolnenie-funkcii-v-cikle.html)

infocean 03.12.2010 04:27

Изменение имени и выполнение функции в цикле
 
Всем примет.
Подскажите, пожалуйста, как сделать, чтобы код ниже заработал?
for (nnn=0;nnn<97;nnn++){
	for (bbb=0;bbb<8;bbb++){
		if(new frames.quiz_main.initValuate+nnn+()[+bbb+].valuation==1){
			ggg="radio0"+nnn+"00"+bbb;
			frames.quiz_main.document.domanda.ggg.checked=true;
		}
	}
}


Интересует сборка и запуск вот этой строки:
new frames.quiz_main.initValuate+nnn+()[+bbb+].valuation;==1

Заранее спасибо.

monolithed 03.12.2010 07:59

Цитата:

Сообщение от infocean
new frames.quiz_main.initValuate+nnn+()[+bbb+].valuation;==1

Эта строка из-за синтаксических ошибок, не может работать

на заметку:
var i = 3;
while(i--){
      alert('id'+i);
}

infocean 03.12.2010 12:53

Цитата:

Сообщение от monolithed (Сообщение 82089)
Эта строка из-за синтаксических ошибок, не может работать

на заметку:
var i = 3;
while(i--){
      alert('id'+i);
}

Я как раз и не могу понять, как правильно сформировать эту строку, так чтобы потом она выполнилась и произошла проверка на её значение.
Строка, после формирования должна выглядеть вот так, которая в свою очередь должна выполниться и получить значение:
new frames.quiz_main.initValuate22()[1].valuation


Вот так не работает(алерт не срабатывает :(, значит строка не выполняется):
for (nnn=0;nnn<97;nnn++){
	for (bbb=0;bbb<8;bbb++){
		if('new frames.quiz_main.initValuate'+nnn+'()['+bbb+'].valuation'==1){
			alert('Test');
			ggg='radio0'+nnn+'00'+bbb;
			frames.quiz_main.document.domanda.ggg.checked=true;
		}
	}
}

Sweet 03.12.2010 13:37

Если сформировать строку, она не обязана исполняться. Строки не занимаются этим:) Да и вообще, бредово как-то выглядет в этом всем деле оператор new.

monolithed 03.12.2010 14:50

<script type="text/javascript">
window.onload = function(){
    for(var i=0; i<3; i++){
        var element = document.createElement('div');
        element.id = 'id'+i;
        element.innerHTML = 'click'+i;
        document.body.appendChild(element);

        element.onclick = (function(){
             return function(){
                  alert(this.id);
             };
         })();
    }
};
</script>

infocean 03.12.2010 17:11

всем спасибо, вопрос решил...
помог eval() :)
var nn=1;
		for (i=nn;i<=98;i++){
			for (bb=0;bb<9;bb++){
				cc='new frames.quiz_main.initValuate'+i+'()['+bb+'].valuation';
				if(eval(cc)==1){
					if(i>10){ ff='radio0'+i+'00'+bb;}
					if(i<10){ ff='radio00'+i+'00'+bb;}
					hh='frames.quiz_main.document.domanda.'+ff+'.checked=true';
					jj=eval(hh);
				}
			}
		}

Aetae 03.12.2010 18:11

Вообще подозреваю что нужно было что-то типа:
var nn=1;
		for (i=nn;i<=98;i++){
			for (bb=0;bb<9;bb++){
				if(new frames.quiz_main['initValuate'+i]()[bb].valuation){
					if(i>10){ ff='radio0'+i+'00'+bb;}
					if(i<10){ ff='radio00'+i+'00'+bb;}//а если i==10?
					frames.quiz_main.document['domanda.'+ff].checked=true;
				}
			}
		}


Часовой пояс GMT +3, время: 05:08.