无法为offsetTop指定位置

时间:2017-02-11 19:23:29

标签: javascript

我有div元素“y”和一类叫做“terrain”的图像。下面的代码旨在使得每当单击该类的元素时,y和该元素共享顶部和左侧位置 但是,它似乎没有起作用。解决办法是什么?

var lands = document.getElementsByClassName("terrain");
for(var i = 0; i < lands.length; i++){
    lands[i].onclick = function(){
        y.style.left = lands[i].offsetLeft;
        y.style.top = lands[i].offsetTop;
    };
}

2 个答案:

答案 0 :(得分:0)

你必须使用IIFE以便当前迭代的#34;地形&#34;在单击时将其属性(offsetLeft,offsetTop)设置为y。

希望这会有所帮助:

$query = "SELECT * FROM users WHERE game LIKE ? OR game LIKE ?";
$params = array("%,game2%", "%,game5%");
$statement = $handle->prepare($query);
$statement->execute($params);

答案 1 :(得分:0)

for循环弄乱了你拥有的闭包(点击处理程序中的变量i对于所有lands都具有相同的值单击它们,i的值将为lands.length,这是一个未定义的值)。之所以发生这种情况,是因为for的范围保持不变,直到最后。您需要为lands数组的每个项创建不同范围的内容。 forEach可以像这样实现:

var lands = document.getElementsByClassName("terrain");
Array.prototype.forEach.call(lands, function(land) {
    land.onclick = function(){
        y.style.left = land.offsetLeft;
        y.style.top = land.offsetTop;
    };
});

由于landsgetElementsByClassName的结果)是类似数组的对象而不是数组forEach是没有定义,所以我们必须这样称呼:Array.prototype.forEach.call。详细了解:forEachclosurecall