Javascript clientY没有展示正确的东西

Javascript clientY没有展示正确的东西,javascript,html,Javascript,Html,我知道这个标题看起来有点奇怪,但我正在尝试创建一个绘图应用程序。我有一个javascript生成的表,它是17乘36,我正在尝试使它成为这样,每当你点击一个框,它就会把它涂成黑色。下面是代码(在这里它的行为更奇怪,因为它们不是30×30像素) var数组=[]; var body=document.body,tbl=document.createElement(“表”); tbl.style.border=“1px纯黑”; tbl.style.borderCollapse=“collapse”

我知道这个标题看起来有点奇怪,但我正在尝试创建一个绘图应用程序。我有一个javascript生成的表,它是17乘36,我正在尝试使它成为这样,每当你点击一个框,它就会把它涂成黑色。下面是代码(在这里它的行为更奇怪,因为它们不是30×30像素)

var数组=[];
var body=document.body,tbl=document.createElement(“表”);
tbl.style.border=“1px纯黑”;
tbl.style.borderCollapse=“collapse”;
tbl.setAttribute(“边框”、“1px”);
tbl.style.margin=“0px”;
tbl.setAttribute(“onClick”、“color(event)”);
var-id=1;
对于(var j=0;j<17;j++){
var row=tbl.insertRow();
row.setAttribute(“id”,id.toString());
id++;
对于(var ij=0;ij<36;ij++){
var cell=row.insertCell();
cell.style.width=“28px”;
cell.style.height=“28px”;
}
}
附肢儿童(tbl);
功能颜色(事件){
var x=event.clientX;
var y=event.clientY;
console.log(x+“=x”);
console.log(y+“=y”);
console.log((x/30)+“=x/30”);
控制台日志((y/30)+“=y/30”);
x=数学单元(x/30);
y=数学单元(y/30);
如果(x==37){x=36}
如果(y==18){y=17}
控制台日志(x+“x后”);
console.log(y+后面的“y”);
document.getElementById(y.toString()).childNodes[x-1].style.background=“black”;
}

节目
身体{
边际:0px;
}

正如在评论中提到的,您正在使这个问题比实际情况更加复杂。单击某个元素时,它会生成一个单击事件,其中包含对该事件所针对的元素的引用。在您的情况下,它已经引用了要更改的td元素

所以:只需使用
event.target
就可以了

/*创建表*/
var数组=[];
var body=document.body,
tbl=document.createElement(“表”);
tbl.style.border=“1px纯黑”;
tbl.style.borderCollapse=“collapse”;
tbl.setAttribute(“边框”、“1px”);
tbl.style.margin=“0px”;
tbl.setAttribute(“onClick”、“color(event)”);
var-id=1;
对于(var j=0;j<17;j++){
var row=tbl.insertRow();
row.setAttribute(“id”,id.toString());
id++;
对于(var ij=0;ij<36;ij++){
var cell=row.insertCell();
cell.style.width=“28px”;
cell.style.height=“28px”;
}
}
附肢儿童(tbl);
功能颜色(事件){
var节点=event.target;
var parent=node.parentNode;
//也许是个孩子,但只要是父母,我们就不在乎
var table=parent.parentNode;
var column=[].slice.call(parent.childNodes).indexOf(node);
var row=[].slice.call(table.childNodes.indexOf(parent);
控制台日志(列);
控制台日志(行);
node.style.background=“黑色”;

}
try event.pageX&&event.pagey事件对象将包含指向已单击TD的链接,您无需搜索它。如果要搜索,请在计算偏移量时注意单元格的填充、边框和间距……此外,您没有设置表格的大小,您没有注意到“像素”不是真正的正方形吗?表格不是从页面顶部开始的,它前面有一个复选框。所以你需要从你的计算中减去桌子的位置。但是我按了哪个?比如,我还想记录下,它被压入了一个612的数组中,其中一个黑色的正方形是1而不是0,但是我应该如何找到我压出来的那一个呢?我已经用一些解释更新了答案。我建议您阅读您使用的东西的文档,以了解您可以使用的东西。