Javascript tr第一个td中的复选框(仅一个)给出未定义

Javascript tr第一个td中的复选框(仅一个)给出未定义,javascript,Javascript,我在jsp中有一个表单。它包含动态tr。Tr可以是一个或多个。当只有一个tr时会出现问题。如果有多个tr,则所有输入元素都将具有相同的名称 function getRowIndex( el ) { while( (el = el.parentNode) && el.nodeName.toLowerCase() !== 'tr' ); if( el ) return el.rowIndex - 1;

我在jsp中有一个表单。它包含动态tr。Tr可以是一个或多个。当只有一个tr时会出现问题。如果有多个tr,则所有输入元素都将具有相同的名称

function getRowIndex( el ) {
            while( (el = el.parentNode) && el.nodeName.toLowerCase() !== 'tr' );
            if( el ) 
            return el.rowIndex - 1;
      }

function enableDisableRow(rowIndex){
           if(document.formName.check_all[rowIndex].checked == true){
                 document.formName.text_all[rowIndex].disabled = false;
           }
}


<table>
   <tr>
      <td>
          <input type="checkbox" name="check_all"       onclick="enableDisableRow(getRowIndex(this))" />
      </td>
          <input type="text" name="text_all" value="Hello" />
      </td>
   </tr>
</table>
函数getRowIndex(el){ while((el=el.parentNode)和&el.nodeName.toLowerCase()!=='tr'); 如果(el) 返回el.ROWDINDEX-1; } 函数enableDisableRow(行索引){ if(document.formName.check_all[rowIndex].checked==true){ document.formName.text\u all[rowIndex].disabled=false; } } 问题是当只有一行时,我将
document.formName.check\u all.checked
作为未定义

if (document.formName.check_all[rowIndex].checked == true) {
    document.formName.text_all[rowIndex].disabled = false;
}

document.formName.check\u all
不返回数组或
nodeList
。它只是
输入
元素。所以不要在上面使用数组索引。另一个问题是您没有名为
“formName”
的元素或表单。请尝试以下方法:

function getRowIndex(el) {
    while ((el = el.parentNode) && el.nodeName.toLowerCase() !== 'tr');
    if (el) return el.rowIndex - 1;
}

function enableDisableRow(rowIndex) {
    if (document.formName.check_all.checked == true) {
        document.formName.text_all.disabled = false;
    }
}
以及HTML:

<form name="formName">
    <table name="">
       <tr>
          <td>
              <input type="checkbox" name="check_all" onclick="enableDisableRow(getRowIndex(this))" />
          </td>
           <td>
              <input type="text" name="text_all" value="Hello" />
          </td>
       </tr>
    </table>
</form>​​​​​​​​​​​​

​​​​​​​​​​​​

document.formName.check_all
仅当表单中有多个同名元素时才会返回
节点列表,否则它只会返回
输入
元素,并使用其上的数组表示法返回
未定义
,在尝试访问其属性时导致语法错误

如果同一表单中没有具有相同输入名称的不同表,则可以使用DOM方法,该方法在旧浏览器中始终返回
节点列表
,或类似于数组的兼容结构

function getRowIndex(el) {
    while ((el = el.parentNode) && el.nodeName.toLowerCase() !== 'tr');
    if (el) return el.rowIndex; //NOTE: I've also removed the -1 here
}
function enableDisableRow(rowIndex) {
    var checkboxes = document.getElementsByName('check_all'),
        textboxes = document.getElementsByName('text_all');

    if (checkboxes[rowIndex].checked) {
        textboxes[rowIndex].disabled = false;
    }
}

-请注意,我使用jQuery仅用于添加动态行,因此您可以使用单行和多行进行测试。

HTML中的
formName
在哪里?然后,当有多个框时,您只需将其打断即可。不客气。那样的话,你介意把它标为?谢谢<代码>=]