未定义的样式

undefined style

本文关键字:样式 未定义      更新时间:2023-09-26

我有大学的家庭作业,经典的15个谜题。我对这两种风格有意见。这是我遇到问题的代码

function siirra_pala(pala) {
 var palaRivi = parseInt(pala.style.top) / palanKoko;
 var palaSarake = parseInt(pala.style.left) / palanKoko;
}

错误代码为"未捕获类型错误:无法读取未定义的属性'top'"answers"未捕获的类型错误:不能读取未定义属性'left'"。

如果有帮助:siirra_pala(pala)是move_tile(tile)palaRivi是tileRow,palaSarake是tileColumnpalanKoko是tileSize。

我把palanKoko设置为100。样式定义在:

function muodosta_palat(pelialue) {
for (var y = 0; y < 4; y++) {
    for (var x = 0; x < 4; x++) {
        if (!(x === tyhja_paikka.x && y === tyhja_paikka.y)) {
            var pala = document.createElement('div');
            pala.id = 'pala' + x + y;
            pala.textContent = 4 * y + x + 1;
            pala.style.left = x * palanKoko + 'px';
            pala.style.top = y * palanKoko + 'px';
            pala.className = 'pala';
            pelialue.appendChild(pala);
        }
    }
}

如果你需要更多的代码,请告诉哪一个。谢谢

@Bergi:

window.onload = function () {
muodosta_palat(document.getElementById('pelialue'));
var palat = document.querySelectorAll(".pala");
document.getElementById('sekoitusnappi').onclick = sekoita;
for (var i = 0; i < palat.length; i++) {
    palat[i].addEventListener("click", siirra_pala);
    palat[i].addEventListener("mouseover", mouseOver);
    palat[i].addEventListener("mouseout", mouseOut);
}
};

从您的错误来看,pala似乎未定义(未设置,不存在),至少不在该函数的范围内。

变量pala是在一个函数中创建的,并且只有在该函数中才知道。您要做的是捕获单击事件,并将单击的内容传递给函数。

如果更改对函数的调用。。

palat[i].addEventListener("click", function () { siirra_pala(this) });

参考应该是好的。

此处:

palat[i].addEventListener("click", siirra_pala);

传递给siirra_pala的参数是点击事件,而不是点击的元素。您应该修改函数,从事件对象中选择单击的元素属性,或者简单地使用this

请参阅:

document.getElementById('x').addEventListener("click", handler);
function handler(e) {
  console.log(e);      // full event object
  console.log(this);   // clicked element
  this.style.background = "#aaa";
}
#x {
  width: 50px;
  height: 50px;
  background: #eee;
}
<div id="x"></div>


因此,对你的功能的修复应该是这样的:

function siirra_pala(pala) {
  var palaRivi = parseInt(this.style.top) / palanKoko;
  var palaSarake = parseInt(this.style.left) / palanKoko;
}

(请记住,此功能不是很有用)