01.03.2014, 02:07
|
|
Аспирант
|
|
Регистрация: 16.01.2014
Сообщений: 50
|
|
узнать номер елемента в массиве при клике
есть 5 дивов, с классом а
есть переменная myVar где -- > .getElementsByClassName('a');
потом addEvent.... и функция в которой нужно:
чтобы при клике на див у меня был alert с номером дива в массиве.
Пример для того чтобы обратиться к одному из дивов мне нужно делать так : myVar[х].
нужно чтобы в "х" заганялся номер дива на которого я кликнул и выводился через alert
Последний раз редактировалось blacklool, 01.03.2014 в 02:25.
|
|
01.03.2014, 02:40
|
|
Профессор
|
|
Регистрация: 30.04.2012
Сообщений: 3,018
|
|
var myVar = document.getElementsByClassName('a');
myVar[0].parentNode.addEventListener('click', function(e) {
var self = e.target;
if(self.className != 'a') return;
var i = myVar.length;
while(i--) {
if(myVar[i] == self) {
var x = i;
break;
}
}
alert(x);
});
|
|
01.03.2014, 04:42
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
<style>
div.a {
padding:5px;
margin: 5px;
background-color: red;
float: left;
}
</style>
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>
<script>
(function () {
var divs = document.querySelectorAll("div.a"),
len = divs.length,
i = 0;
for (; divs[i].setAttribute("onclick", "clval(" + i + ")"), ++i < len;);
clval = function (e) {
alert(e);
};
}());
</script>
Последний раз редактировалось Vlasenko Fedor, 01.03.2014 в 04:50.
|
|
01.03.2014, 05:13
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Фу setAttribute('onclick'), фу clval без var.
<style>
div.a {
padding:5px;
margin: 5px;
background-color: red;
float: left;
}
</style>
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>
<script>
(function () {
var divs = document.querySelectorAll("div.a");
var handler = function() {
// var index = this.dataset.index;
var index = this.getAttribute('data-index');
alert(index);
}
for (var i = 0; i < divs.length; i++) {
// divs[i].dataset.index = i;
divs[i].setAttribute('data-index', i);
divs[i].onclick = handler;
}
}());
</script>
ES5:
<style>
div.a {
padding:5px;
margin: 5px;
background-color: red;
float: left;
}
</style>
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>
<script>
(function () {
var divs = document.querySelectorAll("div.a");
var handler = function() {
var index = Array.prototype.indexOf.call(divs, this);
alert(index);
}
for (var i = 0; i < divs.length; i++) {
divs[i].onclick = handler;
}
}());
</script>
__________________
В личку только с интересными предложениями
|
|
01.03.2014, 05:22
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Вообще, имхо, индекс нафиг не нужен, как и массив. Кликнутый див в колбэк и так передаётся через target/this.)
__________________
29375, 35
|
|
01.03.2014, 21:58
|
Аспирант
|
|
Регистрация: 22.02.2014
Сообщений: 96
|
|
var elements = document.querySelectorAll('.a') || [];
elements = [].slice.apply(elements); // toArray
elements.forEach(function (element, i) {
element.addEventListener('click', function () {
alert(this); // див на который кликнули
alert(element); // див на который кликнули
alert(i); // номер дива на который кликнули
})
});
учитесь рукожопчики мои
Последний раз редактировалось Maxmaxmaxmaximus8, 01.03.2014 в 22:36.
|
|
01.03.2014, 22:33
|
Аспирант
|
|
Регистрация: 22.02.2014
Сообщений: 96
|
|
показал заодно парню как с селекторами работать, как ты заметил. думаешь путаницы больше вносит?
Сообщение от Poznakomlus
|
при чем здесь || [];
|
если вернется null. нельзя делать slice.apply( null )
Сообщение от Poznakomlus
|
и написали ведь есть клсс a
|
ох лол, опечатался)
Последний раз редактировалось Maxmaxmaxmaximus8, 01.03.2014 в 22:36.
|
|
01.03.2014, 22:45
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,589
|
|
Сообщение от Maxmaxmaxmaximus8
|
если вернется null.
|
querySelectorAll null вроде не возвращает, или в каком-то браузере таки пакостит?
__________________
29375, 35
|
|
01.03.2014, 23:17
|
Аспирант
|
|
Регистрация: 22.02.2014
Сообщений: 96
|
|
Сообщение от Poznakomlus
|
в задаче явно описано дивы есть
|
да достал ты придираться, если он на столько тупой что не догадается подменить селектор под свою задачу, то программирование это явно не его
Сообщение от Aetae
|
или в каком-то браузере таки пакостит?
|
нет, я просто ошибся, я напутал все с querySelector и коллекциями.
var elements = [].slice.call(document.querySelectorAll('.a'));
elements.forEach(function (element, i) {
element.addEventListener('click', function () {
alert(this); // див на который кликнули
alert(element); // див на который кликнули
alert(i); // номер дива на который кликнули
})
});
Последний раз редактировалось Maxmaxmaxmaximus8, 02.03.2014 в 17:25.
|
|
02.03.2014, 01:40
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Poznakomlus
|
в задаче явно описано дивы есть
|
Херовая практика использовать такие селекторы. Хотя откуда тебе знать-то..
Сообщение от Poznakomlus
|
приведи где код не работает
|
Привожу:
<style>
div.a {
padding:5px;
margin: 5px;
background-color: red;
float: left;
}
</style>
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>
<script>
(function () {
"use strict";
var divs = document.querySelectorAll("div.a"),
len = divs.length,
i = 0;
for (; divs[i].setAttribute("onclick", "clval(" + i + ")"), ++i < len;);
clval = function (e) {
alert(e);
};
}());
</script>
Ну и вобще речь не про работает/не работает.
Ты ведь сам знаешь - бывает код работает, но в адрес его автора хочется сказать много нехороших слов.
__________________
В личку только с интересными предложениями
|
|
|
|