Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.09.2014, 15:34
Аспирант
Отправить личное сообщение для levshkatov Посмотреть профиль Найти все сообщения от levshkatov
 
Регистрация: 03.09.2014
Сообщений: 61

Метод DOM в if, ошибка
Есть довольно большое количество кнопок. Приходится для каждой прописывать document.getElementById("id").onclick = function;
в этой ф-ции значение переменной для этой кнопки меняется на true и только потом вызывается реальная функция для этой кнопки.
Можно ли как-то сократить этот процесс, убрать кучу булевых переменных?
Я попробовал так, но что-то не работает.
if(document.getElementById("id").onclick)
	{
		alert ("test");
	}
Ответить с цитированием
  #2 (permalink)  
Старый 09.09.2014, 15:40
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от levshkatov
значение переменной для этой кнопки меняется на true и только потом вызывается реальная функция для этой кнопки

Переведи.

А еще лучше - сделай таки тестовый пример. Что у тебя есть... И что нужно получить...
Ответить с цитированием
  #3 (permalink)  
Старый 09.09.2014, 15:43
Аспирант
Отправить личное сообщение для levshkatov Посмотреть профиль Найти все сообщения от levshkatov
 
Регистрация: 03.09.2014
Сообщений: 61

Т.к. есть несколько кнопок, то для того, чтобы узнать какая из них была нажата последней, т.е. какую функцию вызвать, я использую булевые переменные для каждой кнопки. Это офигенно громоздко и неудобно. Поэтому и попросил поправить мой if, т.к. я надеюсь событие можно прям в нем прописать.
Ответить с цитированием
  #4 (permalink)  
Старый 09.09.2014, 15:52
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от levshkatov
Т.к. есть несколько кнопок, то для того, чтобы узнать какая из них была нажата последней, т.е. какую функцию вызвать, я использую булевые переменные для каждой кнопки. Это офигенно громоздко и неудобно.
Зачем вы так убиваетесь? Вы же так не убъетесь! (с)

Как вариант, менять значение класса или какого-то атрибута у кнопок, дабы понять кто из них "последняя нажатая"...

P.S.
Я так понимаю примера тестового мы так и не увидим?
Ответить с цитированием
  #5 (permalink)  
Старый 09.09.2014, 15:52
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Если я понял о чём речь.)
<script>
var actionList = {
    func1: function(){
        alert('func1')
    },
    func2: function(){
        alert('func2')
    },
    funcn: function(){
        //...
    },

};
document.onclick = function(event){
    var target = event.target;
    
    if(target.tagName == 'BUTTON' && target.className == 'button-class'){
        var action = target.getAttribute('data-action');
        
        if(action && actionList[action]) actionList[action]();
        else console.log('No action: "' + action +'".', event);
    }
}
</script>

<button class="button-class" data-action="func1">1</button>
<button class="button-class" data-action="func2">2</button>
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 09.09.2014, 16:05
Аспирант
Отправить личное сообщение для levshkatov Посмотреть профиль Найти все сообщения от levshkatov
 
Регистрация: 03.09.2014
Сообщений: 61

ksa, не совсем понял, зачем здесь нужен тестовый пример, я описал задачу и сказал, что не могу найти решение.

Aetae, да, это то, что надо. Спасибо большое! Только не совсем понимаю для чего нужен if, проверяющий action && actionList[action], и соответствующий ему else.
Ответить с цитированием
  #7 (permalink)  
Старый 09.09.2014, 16:22
Аспирант
Отправить личное сообщение для levshkatov Посмотреть профиль Найти все сообщения от levshkatov
 
Регистрация: 03.09.2014
Сообщений: 61

Еще вопрос. Никак не могу найти ошибку.
var icoSystem=document.createElement("img"); 
icoSystem.setAttribute("src","icoSystem.png");


UPD. Решено. надо было привязать к DOM с помощью appendChild.

Последний раз редактировалось levshkatov, 09.09.2014 в 16:34.
Ответить с цитированием
  #8 (permalink)  
Старый 09.09.2014, 16:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от levshkatov
Aetae, да, это то, что надо
Вот для этого и нужен тестовый пример, который он за тебя и сделал.
Ответить с цитированием
  #9 (permalink)  
Старый 09.09.2014, 16:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

levshkatov, обработка ошибок. У кнопки по какой-то причине может не оказаться атрибута "data-action", или в actionList может не оказаться нужной функции.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 10.09.2014, 01:35
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Aetae,
document.onclick это уже слишком.
Лучше обернуть блок кнопок с id и на него вешать обработку событий
var target = event.target; здесь нет обработчика для ИЕ
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация плагинов до вставки html-я в DOM FanAizu jQuery 3 19.01.2014 01:16
Ошибка без ошибки. Не работает метод split Artyom Общие вопросы Javascript 3 15.08.2013 20:28
Ошибка в листинге - привилегированный метод. Джон Рейсиг hat_tab Учебные материалы 2 23.10.2011 17:43
Ошибка в ИЕ. Объект не поддерживает это свойили метод! goooooch Internet Explorer 3 14.06.2011 16:39
метод call() - ошибка ( mrValter AJAX и COMET 1 31.07.2009 11:09