Повоторяющаяся функция
Добрый день!
Никак не могу понять, как реализовать. В общем есть много кнопок, каждая кнопка вызывает определенную функцию. Разница в функциях только в цифре. Вот пример: function naztoa2(){ var knopga2 = document.getElementById("knopga2"); var knopg2 = document.getElementById("knopg2"); var forb2 = document.getElementById("forb2"); var fors2 = document.getElementById("fors2"); var forbk2 = document.getElementById("forbk2"); var forsk2 = document.getElementById("forsk2"); knopga2.className="vidsamknopa"; knopg2.className="vidsamknop"; forb2.style.display = "none"; fors2.style.display = ""; forbk2.style.display = "none"; forsk2.style.display = ""; } Подскажите, пожалуйста, как мне 2 запихнуть в х, а вызов сделать такой: naztoa(2) - у первой кнопки naztoa(3) - у второй и т.д. |
Если разница только в цифре, то зачем много функций?
|
Вот и хочу из много сделать одну, и никак не могу понять как это сделать.
id у блоков, которые меняются, только цифра отличается |
Вариант:
function elemHide(a){ document.getElementById(a).display = "none"; } function elemNoHide(a){ document.getElementById(a).display = ""; } function addClass(a,b){ document.getElementById(a).className=b; } function setArrActions(arr){ var lng = arr.length; for(var i=0;i<lng;i++){ var act = arr[i].split('-'); if(act[0]==2) {addClass(act[1],act[2]);continue;} if(act[0]==1) {elemHide(act[1]);continue;} if(act[0]==0) {elemNoHide(act[1]);continue;} } } // Maccив деяний: 2- добавляем класс, 1 - элемент скрываем, 0 - удаляем скрытие var naztoaXX = "2-knopgaXX-vidsamknopa,2-knopgXX-vidsamknop,1-forbXX,1-forbkXX,0-forsXX,0-forskXX"; var naztoa2Arr = "naztoaXX".replace(/XX/gim,"2").split(','); setArrActions(naztoa2Arr); var naztoa3Arr = "naztoaXX".replace(/XX/gim,"3").split(','); setArrActions(naztoa3Arr); var naztoa4Arr = "naztoaXX".replace(/XX/gim,"4").split(','); setArrActions(naztoa4Arr); ==================== Ну или используя исходник: naztoaXX = function (){ var knopgaXX = document.getElementById("knopgaXX"); var knopgXX = document.getElementById("knopgXX"); var forbXX = document.getElementById("forbXX"); var forsXX = document.getElementById("forsXX"); var forbkXX = document.getElementById("forbkXX"); var forskXX = document.getElementById("forskXX"); knopgaXX.className="vidsamknopa"; knopgXX.className="vidsamknop"; forbXX.style.display = "none"; forsXX.style.display = ""; forbkXX.style.display = "none"; forskXX.style.display = ""; } function generate_naztoaN(n){eval("window['naztoa'+n]="+naztoaXX.toString().replace(/XX/gim,n))} generate_naztoaN(3); alert(naztoa3); generate_naztoaN(1); alert(naztoa1); На выходе получаеm функции:naztoa1() ,naztoa2() и т.д. |
id у блоков, которые меняются, только цифра отличается
Ну и получайте эту цифру как аргумент для одной функции, которую можно извлечь из ID объекта. Если ID именовать так - name-N, то цифра, это this.id.split('-').pop() или для nameN - this.id.replace(/\D/, ''). |
Ничего себе как все сложно))
Спасибо вам огромное)) |
Подскажите, пожалуйста, что не так?
Нужно что бы у дива поставился class <input type="button" onclick="generate_naztoaN(3); naztoa3; " /> <div id="knopga3"></div> <script> naztoaXX = function (){ var knopgaXX = document.getElementById("knopgaXX"); knopgaXX.className="vidsamknopa"; } function generate_naztoaN(n){eval("window['naztoa'+n]="+naztoaXX.toString().replace(/XX/gim,n))} </script> |
qwe88,
Проще(и правильнее) для этой цели использовать функцию с двумя аргументами из Варианта 1 function addClass(a,b){ document.getElementById(a).className=b; } addClass(knopga1,vidsamknopa); addClass(knopga2,vidsamknopa); addClass(knopga3,vidsamknopa); Для Вашей текущей идеологии, имхо проще так: <script> function addClassva(a){ //va - ассоциируем с 'vidsamknopa' document.getElementById(a).className='vidsamknopa'; } </script> <input type="button" onclick="addClass('knopga3')" /> <div id="knopga3"></div> |
Супер!
Спасибо огромное! |
В итоге у меня получилось так:
<input type="button" onclick="addClassva(3)" /> <div id="knopga3"></div> <script type="text/javascript"> function addClassva(a){ document.getElementById("knopga" + a).className='vidsamknopa'; } </script> |
Часовой пояс GMT +3, время: 17:25. |