我有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;
};
}
答案 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;
};
});
由于lands
(getElementsByClassName
的结果)是类似数组的对象而不是数组,forEach
是没有定义,所以我们必须这样称呼:Array.prototype.forEach.call
。详细了解:forEach,closure和call。