Я пытаюсь динамически добавлять элементы HTML с обработчиками кликов. Когда активируется обработчик кликов, он нацеливается на неправильный элемент (он всегда нацелен на внешний круг). Где может быть проблема?Получение неправильного элемента в обработчике кликов с перекрывающимися «круглыми» divs
(function() {
//selector, jQuery style
var $ = function(selector) {
return document.querySelector(selector);
}
//getting quantity of circles
var quantity = $('.circles').getAttribute('quantity');
//setting outer width/height for circles
$('.circles').style.width = (quantity * 50) + 4 + 'px';
$('.circles').style.height = (quantity * 50) + 4 + 'px';
//creating element for children
var childCircle = document.createElement('div');
childCircle.className = 'subCircle';
//click function for children
function onClick() {
this.attributes.style.value += 'border-color: red;'
alert(this.clientHeight);
}
//append sub circles
for (var i = 0; i < quantity; i++) {
$('.circles').appendChild(childCircle.cloneNode());
}
//iterate over .circles .subCircle and add onClick function for each subCircle and css aswell
var subCircle = $('.circles').getElementsByClassName('subCircle');
for (var i = 0; i < subCircle.length; i++) {
subCircle[i].onclick = onClick;
subCircle[i].style.width = ((i + 1) * 50) + 'px';
subCircle[i].style.height = ((i + 1) * 50) + 'px';
}
})();
.circles {
position: absolute;
}
.subCircle {
position: absolute;
border-radius: 50%;
transform: translateX(-50%) translateY(-50%);
border: 2px solid black;
top: 50%;
left: 50%;
}
<body>
<div class="circles" quantity=10></div>
</body>
Также на jsFiddle: https://jsfiddle.net/martin_borman/1srkL5bf/
'subCircle [i] .onclick = onClick', вы потеряли' this' там. Не точка, не 'это'. – elclanrs
сделайте ваши слушатели событий такими, как 'function (e) {e.target.attributes.style.value + = 'border-color: red;'}' – Redu
@elclanrs: Это хорошо с вышесказанным, 'this' будет установлено вызов. –