Доброго времени суток.
есть следующий код:
shapes = [];
createRect = function (x, y) { shape = r.rect(x, y, 95, 25, 20); shapes.push(shape); text = r.text(x + 40, y + 10, "New node"); texts.push(text); for (i = 1; i < shapes.length; i++) { tcolor = "#4C5053"; scolor = "#BDBFC1"; fcolor = "#FCFEFF"; shapes[i].attr({ fill: fcolor, stroke: scolor, "stroke-width": 2, cursor: "move" }); texts[i].attr({ fill: tcolor, stroke: "none", "font-size": 15, cursor: "move" }); array = new Object(); array[i] = ("shapes" + i); shapes[i].pair = texts[i]; texts[i].pair = shapes[i]; shapeLength = shapes.length;
shapes[i].drag(move, dragger, up); texts[i].drag(move, dragger, up); };
}; //endcreaterect
document.getElementById("image").onclick = function () { createRect(CRX, CRY); Select(); changeC();
};
здесь я создаю , с помощью библиотеки Raphael прямоугольники при нажатии на картинку "image".
как мне определить, по какому прямоугольнику я делаю клик?
с помощью функции Select(), я вызиваю alert на клик по элементу, но вызивается только последний alert. Что тогда мне делать?
var Select = function () {
for (x in array) { joptarray.push(shapes[x]);
if (shapes[x]) { shapes[x].click(function () { selected = shapes[x]; if (selected == shapes[x]) { alert("shape" + x);
}; }); };
}; };
холст создается в однов диве "element":
var div = document.createElement("div"); div.id = "element"; document.body.appendChild(div); ... r = Raphael(document.getElementById("element"));
там и следует перехвачивать клик для каждого созданого прямоугольника. наперед мы не знаем сколько елементов будет создано.
У вас очень странный для меня код, все переменные глобальные и их очень много, это не есть хорошо.
Вообщем перебираем массив ссылок на элементы и вешаем на каждый событие onclick.
Меня смущает это. r.rect создает один элемент? Значит длинна массива shapes единица. И ваш цикл прокручивается один раз.
У вас, что то не так с созданием элементов. Добейтесь сохраняйте где-то все созданные элементы нормального.
Или костыль: