我试图能够使用 AJAX 从数据库中“拖动”从数据库加载的 SVG 元素(使用 Raphael)。我可以加载它们并从数据库中很好地显示它们,但是当我想为每个单独的事件处理程序添加事件处理程序时,我似乎无法正确处理。
当DOM准备好时,我在从数据库加载所有元素后尝试使用 .on() :
$('circle').on("mousedown", function(event) {
ox = event.screenX;
oy = event.screenY;
event.target.attr({opacity: .5});
dragging = true;
});
但这似乎永远不会被调用。
我可以在创建圆圈期间添加事件,但只有最后一个添加的元素实际移动——但前提是鼠标位于其他已加载圆圈的 X、Y 范围内:
var data = $.ajax({
type: "POST",
url: "map.php",
data: "loadMap=1",
success: function(text) {
var item = text.split(";");
for (x in item)
{
if (item[x].length > 0)
{
var str = item[x].split(",");
if (str[0] == "node")
{
var c = svg.circle(str[1], str[2], 10);
c.attr("id", str[3]);
c.attr("fill", "black");
c.attr("stroke", "none");
c.mousedown(function(event) {
ox = event.screenX;
oy = event.screenY;
c.attr({opacity: .5});
dragging = true;
});
c.mousemove(function(event) {
if (dragging) {
c.translate(event.screenX - ox, event.screenY - oy);
ox = event.screenX;
oy = event.screenY;
}
});
c.mouseup(function(Event) {
dragging = false;
c.attr({opacity: 1});
});
}
else if (str[0] == "room")
{
}
}
}
}
});
我做错了什么,或者更好的是,解决这个问题的最佳方法是什么?