Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2015, 22:09
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

Повоторяющаяся функция
Добрый день!
Никак не могу понять, как реализовать. В общем есть много кнопок, каждая кнопка вызывает определенную функцию. Разница в функциях только в цифре.
Вот пример:
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) - у второй
и т.д.
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2015, 22:51
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,726

Если разница только в цифре, то зачем много функций?
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2015, 22:53
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

Вот и хочу из много сделать одну, и никак не могу понять как это сделать.
id у блоков, которые меняются, только цифра отличается
Ответить с цитированием
  #4 (permalink)  
Старый 25.04.2015, 01:30
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,220

Вариант:
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() и т.д.

Последний раз редактировалось Deff, 25.04.2015 в 03:22.
Ответить с цитированием
  #5 (permalink)  
Старый 25.04.2015, 06:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 11,726

id у блоков, которые меняются, только цифра отличается

Ну и получайте эту цифру как аргумент для одной функции, которую можно извлечь из ID объекта. Если ID именовать так - name-N, то цифра, это this.id.split('-').pop() или для nameN - this.id.replace(/\D/, '').
Ответить с цитированием
  #6 (permalink)  
Старый 25.04.2015, 12:55
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

Ничего себе как все сложно))
Спасибо вам огромное))
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2015, 13:52
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

Подскажите, пожалуйста, что не так?
Нужно что бы у дива поставился 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, 25.04.2015 в 14:05.
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2015, 15:25
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,220

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>
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2015, 17:29
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

Супер!
Спасибо огромное!
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2015, 19:33
Аватар для qwe88
Кандидат Javascript-наук
Отправить личное сообщение для qwe88 Посмотреть профиль Найти все сообщения от qwe88
 
Регистрация: 14.06.2014
Сообщений: 137

В итоге у меня получилось так:
<input type="button" onclick="addClassva(3)" />
<div id="knopga3"></div>

<script type="text/javascript">
function addClassva(a){
   document.getElementById("knopga" + a).className='vidsamknopa';
}
</script>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 16:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 12:01
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 21:49
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 18:00
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 12:47