09.09.2014, 15:34
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Метод DOM в if, ошибка
Есть довольно большое количество кнопок. Приходится для каждой прописывать document.getElementById("id").onclick = function;
в этой ф-ции значение переменной для этой кнопки меняется на true и только потом вызывается реальная функция для этой кнопки.
Можно ли как-то сократить этот процесс, убрать кучу булевых переменных?
Я попробовал так, но что-то не работает.
if(document.getElementById("id").onclick)
{
alert ("test");
}
|
|
09.09.2014, 15:40
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от levshkatov
|
значение переменной для этой кнопки меняется на true и только потом вызывается реальная функция для этой кнопки
|
Переведи.
А еще лучше - сделай таки тестовый пример. Что у тебя есть... И что нужно получить...
|
|
09.09.2014, 15:43
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Т.к. есть несколько кнопок, то для того, чтобы узнать какая из них была нажата последней, т.е. какую функцию вызвать, я использую булевые переменные для каждой кнопки. Это офигенно громоздко и неудобно. Поэтому и попросил поправить мой if, т.к. я надеюсь событие можно прям в нем прописать.
|
|
09.09.2014, 15:52
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от levshkatov
|
Т.к. есть несколько кнопок, то для того, чтобы узнать какая из них была нажата последней, т.е. какую функцию вызвать, я использую булевые переменные для каждой кнопки. Это офигенно громоздко и неудобно.
|
Зачем вы так убиваетесь? Вы же так не убъетесь! (с)
Как вариант, менять значение класса или какого-то атрибута у кнопок, дабы понять кто из них "последняя нажатая"...
P.S.
Я так понимаю примера тестового мы так и не увидим?
|
|
09.09.2014, 15:52
|
|
Тлен
|
|
Регистрация: 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
|
|
09.09.2014, 16:05
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
ksa, не совсем понял, зачем здесь нужен тестовый пример, я описал задачу и сказал, что не могу найти решение.
Aetae, да, это то, что надо. Спасибо большое! Только не совсем понимаю для чего нужен if, проверяющий action && actionList[action], и соответствующий ему else.
|
|
09.09.2014, 16:22
|
Аспирант
|
|
Регистрация: 03.09.2014
Сообщений: 61
|
|
Еще вопрос. Никак не могу найти ошибку.
var icoSystem=document.createElement("img");
icoSystem.setAttribute("src","icoSystem.png");
UPD. Решено. надо было привязать к DOM с помощью appendChild.
Последний раз редактировалось levshkatov, 09.09.2014 в 16:34.
|
|
09.09.2014, 16:41
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от levshkatov
|
Aetae, да, это то, что надо
|
Вот для этого и нужен тестовый пример, который он за тебя и сделал.
|
|
09.09.2014, 16:43
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
levshkatov, обработка ошибок. У кнопки по какой-то причине может не оказаться атрибута "data-action", или в actionList может не оказаться нужной функции.
__________________
29375, 35
|
|
10.09.2014, 01:35
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Aetae,
document.onclick это уже слишком.
Лучше обернуть блок кнопок с id и на него вешать обработку событий
var target = event.target; здесь нет обработчика для ИЕ
|
|
|
|