Javascript 在拖动上记录DOM位置

Javascript 在拖动上记录DOM位置,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我试图记录可拖动div相对于其DOM父级的位置。我有一个全局对象g,它包含另一个对象bPos,该对象应该包含div class='b'在div id^='d'中的位置 这是我的代码: function() { var thisDiv = ""; var thisDivID = ""; $(".b").draggable({ start: function(event, ui) { thisDi

我试图记录可拖动div相对于其DOM父级的位置。我有一个全局对象
g
,它包含另一个对象
bPos
,该对象应该包含
div class='b'
div id^='d'中的位置

这是我的代码:

function() {
        var thisDiv = "";
        var thisDivID = "";
        $(".b").draggable({
            start: function(event, ui) {
                thisDiv = $(this).closest("div[id^='d']");
                thisDivID = thisDiv.attr("id");
                console.log(thisDivID); //also returning undefined

            },
            stop: function(event, ui) {
                var thisX = event.pageX;
                var thisY = event.pageY;
                var thisbPos = {
                    id: thisDivID,
                    x: thisX,
                    y: thisY
                }
                g.bPos[thisDivID] = thisbPos;
                console.log(thisDivID);// returning undefined
            }
        });
}

控制台显示
thisDivID
未定义的
。即使我给它指定了一个任意的值,它仍然显示为
未定义的
。任何帮助都很好。

请改用“拖动:”方法。 我使用它来允许列表项在稍微有点阻力的情况下从列表中“拖出”。通常y轴网设置为一个较大的数字,因此它不能左右移动,只能上下移动。在这里的代码中,当用户尝试将其向左或向右移动127px时,它将弹出并自由移动

希望你能从我的代码中得到灵感:

drag: function (event, ui)
{
    var left = ui.offset.left; //Offset of the list item currently being dragged

    if (parseInt(left) > 127)
    {
        if (!overlay)
        {
            overlay = true;
            $(".li-unreachable").draggable("option", "grid", [1, 1]); //free-moving
            showOverlay();
        }
    } else
    {
        if (overlay)
        {
            hideOverlay();
            $(".li-unreachable").draggable("option", "grid", [300, 50000]); //y-axis more or less locked down
            overlay = false;
        }
    }
编辑:如果你需要更多的代码,请告诉我,我只抓住了似乎相关的部分

编辑2:我想我也应该指出,如果您将“$(this)”更改为“ui”,您的代码应该可以工作

编辑3:以下是一些更切题的代码:

$(".b").draggable({
    start: function(event, ui) {
        var x = ui.offset.left; //x coordinate of the object that is being dragged.
        var y = ui.offset.top; //y coordinate of the object that is being dragged.
        var elementBeingDragged = ui.item; // ui.helper would work too.
    },
    stop: function(event, ui) {
        var x = ui.offset.left; //x coordinate of the object that is being dragged.
        var y = ui.offset.top; //y coordinate of the object that is being dragged.
        var elementBeingDragged = ui.item; // ui.helper would work too.
    }
});

@我想用X和Y坐标来保存位置。另外,我想使用
dragstop
,因为这样可以释放内存(我只需要最终位置)。我的主要问题是,为什么
thisDivID
被认为是未定义的?@IanW--我知道
ui
散列包含位置信息,但我不知道如何访问它。这里有什么建议吗?
var x=ui.offset.left;var y=ui.offset.top$(此)引用容器。不确定你的标记是什么样子的,但这可能是你想要的,也可能不是你想要的。@codeninja,如果我没有回答你的问题,请告诉我。我的回答显示了如何访问您正在拖动的元素的
offset
属性,我相信您正在查找该属性,因此我对下一票感到困惑。如果我偏离了轨道,请告诉我!谢谢