2016-11-12 2 views
2

Я использую Adobe Animate CC для проекта холста. У меня есть массив, который я назначенные события слушателей нравится так:Пытаясь использовать indexOf, чтобы найти значение индекса массива при нажатии кнопок

for(var i = 0; i < navBtnArray.length; i++){ 
navBtnArray[i].addEventListener("click", navigationControls); 
} 

То, что я пытаюсь выяснить, как захватить значение индекса кнопки, которая была нажата в массиве. Я так пробовал:

function navigationControls(e){ 

console.log(navBtnArray.indexOf(this)); 
} 

Но это продолжает возвращаться -1. Опять же это Animate CC, поэтому у меня нет доступа к jQuery. Анимация использует библиотеку CreateJS и EaselJS. Раньше я использовал indexOf в AS3, но, похоже, он не работает точно так же.

+0

Я был в состоянии получить эту работу, используя свойство currentTarget. console.log (navBtnArray.indexOf (e.currentTarget) + "это индекс массива кнопок"); – icekomo

ответ

0

Попробуйте это:

var navBtnArray = document.getElementsByClassName('demo'); 
 
for(var i = 0; i < navBtnArray.length; i++){ 
 
(function(index){ 
 
     navBtnArray[i].onclick = function(){ 
 
       console.log(index) ; 
 
     }  
 
    })(i); 
 

 
}
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button> 
 
<button class="demo">hi</button>

+0

Это выглядит как чистый javascript подход. Я использую платформу Animate, и там для использования структуры js/easelJS внутри Animate. Я нашел эту статью, но, похоже, не решил мою проблему: http://createjs.com/docs/easeljs/classes/Utility%20Methods.html#method_indexOf – icekomo

1

Для этого, вы можете использовать:

function navigationControls(e){ 
    console.log(navBtnArray.indexOf(e.target)); 
} 

Если это все еще не работает, и indexOf нельзя сравнивать такие объекты, вы можете попробовать добавление дополнительного имущества к объектам кнопки, например:

for(var i = 0; i < navBtnArray.length; i++){ 
    navBtnArray[i].addEventListener("click", navigationControls); 
    navBtnArray[i].index = i; 
} 

, а затем сделать:

function navigationControls(e){ 
    console.log(e.target.index); 
} 
+0

Возможно, вы захотите использовать 'e.currentTarget' вместо 'target', если кнопка имеет детей. Вы также можете отключить мыши, используя 'btn.mouseChildren = false'. – Lanny

+0

Да, действительно. Хотя, я думаю, что это случайный сценарий, зависящий от того, как выполняется графика, так как иногда я получал странные возвращения от детей формы, используя 'e.currentTarget'. –

Смежные вопросы