Javascript 在这个代码中,PAR.WRORDEX是空的

Javascript 在这个代码中,PAR.WRORDEX是空的,javascript,Javascript,我对JavaScript非常陌生,但我不知道为什么这个程序不能工作。 当我单击位于动态创建表中单元格中的动态创建按钮时,我希望获得按钮所在行的rowindex 提前感谢-以下是我的代码: <html> <head> <script> function whichrow(obj) { var par = obj.parentNode; while(pa

我对JavaScript非常陌生,但我不知道为什么这个程序不能工作。
当我单击位于动态创建表中单元格中的动态创建按钮时,我希望获得按钮所在行的
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是空的。