Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Метод DOM в if, ошибка (https://javascript.ru/forum/misc/50050-metod-dom-v-if-oshibka.html)

levshkatov 09.09.2014 15:34

Метод DOM в if, ошибка
 
Есть довольно большое количество кнопок. Приходится для каждой прописывать document.getElementById("id").onclick = function;
в этой ф-ции значение переменной для этой кнопки меняется на true и только потом вызывается реальная функция для этой кнопки.
Можно ли как-то сократить этот процесс, убрать кучу булевых переменных?
Я попробовал так, но что-то не работает.
if(document.getElementById("id").onclick)
	{
		alert ("test");
	}

ksa 09.09.2014 15:40

Цитата:

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

:blink:
Переведи.

А еще лучше - сделай таки тестовый пример. Что у тебя есть... И что нужно получить...

levshkatov 09.09.2014 15:43

Т.к. есть несколько кнопок, то для того, чтобы узнать какая из них была нажата последней, т.е. какую функцию вызвать, я использую булевые переменные для каждой кнопки. Это офигенно громоздко и неудобно. Поэтому и попросил поправить мой if, т.к. я надеюсь событие можно прям в нем прописать.

ksa 09.09.2014 15:52

Цитата:

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

Зачем вы так убиваетесь? Вы же так не убъетесь! (с) :D

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

P.S.
Я так понимаю примера тестового мы так и не увидим?

Aetae 09.09.2014 15:52

Если я понял о чём речь.)
<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>

levshkatov 09.09.2014 16:05

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

Aetae, да, это то, что надо. Спасибо большое! Только не совсем понимаю для чего нужен if, проверяющий action && actionList[action], и соответствующий ему else.

levshkatov 09.09.2014 16:22

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


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

ksa 09.09.2014 16:41

Цитата:

Сообщение от levshkatov
Aetae, да, это то, что надо

Вот для этого и нужен тестовый пример, который он за тебя и сделал.

Aetae 09.09.2014 16:43

levshkatov, обработка ошибок. У кнопки по какой-то причине может не оказаться атрибута "data-action", или в actionList может не оказаться нужной функции.

Vlasenko Fedor 10.09.2014 01:35

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


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