Javascript tr第一个td中的复选框(仅一个)给出未定义
我在jsp中有一个表单。它包含动态tr。Tr可以是一个或多个。当只有一个tr时会出现问题。如果有多个tr,则所有输入元素都将具有相同的名称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;
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
在哪里?然后,当有多个框时,您只需将其打断即可。不客气。那样的话,你介意把它标为?谢谢<代码>=]