Повоторяющаяся функция
Добрый день!
Никак не могу понять, как реализовать. В общем есть много кнопок, каждая кнопка вызывает определенную функцию. Разница в функциях только в цифре. Вот пример:
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, время: 22:43. |