-1

在此处输入代码如果您查看此代码,它将获取 div 标签的左坐标 - http://jsfiddle.net/JuPA4/3/这正是我所需要的。

$(function () {
    var position = $("#red11").offset();
    $("#amount").val(position.left);
});

(我在Hype论坛上问过,现在3天没有答案)

控制台错误是 (Uncaught TypeError: Cannot read property 'left' of undefined) 不知道为什么,因为我可以与元素交互!

黑点元素位于 div 标签内#black,由于某种原因,上面发布的代码不适用于该hype文件!我知道我可以与之交互,并且我在页面上添加了一个演示,单击隐藏/显示以与点交互。

我不是 Javascript 方面最好的,所以如果有人有任何想法,我们将不胜感激。

这样做的最终结果是左侧和顶部的坐标都更新为文本输入,因此我可以将它们放入数据库中。

4

1 回答 1

1

如果您调用.offset()一个不匹配任何元素的选择器,它会返回undefined,并且您的选择器似乎在“黑色”元素添加到 DOM 之前执行。您需要将代码延迟到元素添加到 DOM 之后。

您可以查看此问题以获取解决方案。它展示了一种观察 DOM 的方法。

或者您可以尝试类似以下的操作,它只是尝试、等待并再次尝试,直到元素存在:

<script>
function executeWhenExists(selector, wait, callback) {
    if ($(selector).length > 0) {
        callback();
    } else {
        setTimeout(function() { executeWhenExists(selector, wait, callback) }, wait);
    }
}

$(function () {
    executeWhenExists("#black", 1000, function() {
        var position = $("#black").offset();
        $("#amount").val(position.left);
    });
});
</script>

将代码延迟到窗口的加载事件(而不是让它在文档的就绪事件中运行)甚至可能就足够了。看起来像这样:

<script>
$(window).on('load', function () {
    var position = $("#black").offset();
    $("#amount").val(position.left);
});
</script>
于 2013-11-15T05:41:42.853 回答