Javascript 在这个代码中,PAR.WRORDEX是空的
我对JavaScript非常陌生,但我不知道为什么这个程序不能工作。Javascript 在这个代码中,PAR.WRORDEX是空的,javascript,Javascript,我对JavaScript非常陌生,但我不知道为什么这个程序不能工作。 当我单击位于动态创建表中单元格中的动态创建按钮时,我希望获得按钮所在行的rowindex 提前感谢-以下是我的代码: <html> <head> <script> function whichrow(obj) { var par = obj.parentNode; while(pa
当我单击位于动态创建表中单元格中的动态创建按钮时,我希望获得按钮所在行的
rowindex
提前感谢-以下是我的代码:
<html>
<head>
<script>
function whichrow(obj) {
var par = obj.parentNode;
while(par.nodeName.toLowerCase()! = 'tr') {
par = par.parentNode;
}
alert(par.rowIndex);
}
</script>
</head>
<body>
<script>
mybody = document.getElementsByTagName("body")[0];
mytable = document.createElement("table");
mytablebody = document.createElement("tbody");
for(var i = 0; i<5; i++) {
mycurrent_row = document.createElement("tr");
mycurrent_row.id = "row"+i;
for(var j = 0; j<4; j++) {
mycurrentcell = document.createElement("td");
currenttext = document.createTextNode("Row" + i + "Column" + j);
mycurrentcell.appendChild(currenttext);
mycurrent_row.appendChild(mycurrentcell);
}
mybutoncell = document.createElement("td");
but = document.createElement("button");
mybutoncell.appendChild(but);
mycurrent_row.appendChild(mybutoncell);
mytablebody.appendChild(mycurrent_row);
but.onClick = whichrow(this);
}
mytable.appendChild(mytablebody);
mybody.appendChild(mytable);
mytable.setAttribute("border", "2");
</script>
</body>
</html>
函数whichrow(obj){
VaR=Obj.PARTRONDENT;
while(par.nodeName.toLowerCase()!='tr'){
PAR=PARN节点;
}
警报(par.rowIndex);
}
mybody=document.getElementsByTagName(“正文”)[0];
mytable=document.createElement(“表格”);
mytablebody=document.createElement(“tbody”);
对于(var i=0;i您要传递给whichrow()的obj
)
是一个按钮,我假设它位于TD
中。因此,您的while
循环将在其第一次迭代中退出,从而导致par
持有一个TD
,而该TD没有名为rowIndex
的属性,因此这里需要注意几点
在javascript事件系统中,系统使用自己的事件对象调用回调,该对象根据发生的情况包含不同的属性
因此,以下是错误:
当您分配给事件处理程序时,当您说but.onclick=whichrow(这个)
您正在设置but.onclick到whichrow
的结果,它是未定义的,因为您没有返回任何内容。它应该是but.onclick=whichrow;
,当用户单击您的按钮时,它将调用whichrow
。传递的参数是一个对象。我提供的参数应该是一个好的参数开始阅读哪些类型的属性可供您使用
我必须检查一下,因为我经常使用el.addEventListeners,但是,onclick
需要小写,而不是像您这样的camelCase
在事件回调中,此
通常指单击的元素,因此您应该使用该元素
没有行索引
属性
现在,尝试找到问题的解决方案。通过遍历dom可以收集rowIndex。我不确定这将起到什么作用,因为您正在手动创建dom,并且已经知道rowIndex,但是如果它未知,我会这样做
function whichRow(e) {
// here this should be the button.
var curRow = this.parentElement.parentElement,
rowIndex = 0;
while(curRow) {
curRow = curRow.previousElementChild;
rowIndex++;
}
return rowIndex;
}
我在脑子里想了想,但重点是给出主要的想法。在上面的片段中,我选择了按钮的父项,因为下面是按钮部分的大致标记:
<tr>
<td>
<button></button>
</td>
</tr>
因此,button元素的parentElement的parentElement应该为您提供
。然后,我们将向后遍历,直到没有任何以前的元素,一边计数。一旦以前的元素为null,就返回计数。谢谢我读了很多文章,但似乎缺少一些内容!正如我所说的,我想获得rowIndex pr单击按钮所在行的属性!1.您不能选择使用哪个对象调用单击回调。这将取决于调用的位置。您能解释一下您的意思吗?对不起,我的英语不是很好,我已经准备好解决问题了!!!!首先,确实没有rowIndex属性2.onclick真的应该是wi我昨天写了这封信,它工作得很好!你是对的-当我读到更多关于这个词的内容时,我设法解决了这个问题,再次感谢你使用but.onClick=whichrow(我当前的行)
代替but.onClick=whichrow(此)代码???也,在代码<代码>中放置一些空间(Pal.NoNeNo.ToWORCaseCe()!=‘TR’){<代码/ >……Fibug的控制台中有什么错误?至少在页面上加载这个脚本吗?同样的错误-PAR是空的。