3

我试图通过仅单击一个按钮来启用/禁用具有相同 ID 的列中文本框的只读属性,但我的代码似乎不起作用。我仍然不熟悉 PHP 的工作原理

PHP中的代码:

<input type='text' name='nTotal[$i]' value='$row->Total' size='5'  readonly='true' id='ntotal[$i]'>

javascript中的代码:

var a = document.getElementById(ntotal); //ntotal[$i] is the ID name of textbox in PHP
for (var i=0;i<a.length;i++){            

 if (a[i].readonly == 'false' ) {
        a[i].readonly = 'true';
         }

 else if(a[i].readonly == 'true'){ 
        a[i].readonly = 'false';
          }
    }
}

谁能给我一个提示为什么它不起作用?我尝试使用名称而不是 ID,但结果相同。

4

3 回答 3

1

正如其他人所提到的,您应该使用类,getElementsByClassName而不是getElementById因为后者最多只会返回一个元素,基于 id 是唯一的规范。此外,readOnly(区分大小写,大写 O)属性是布尔值,因此无法将其与字符串进行比较。

var a = document.getElementsByClassName(ntotal);
for (var i=0;i<a.length;i++) {
    a[i].readOnly = !a[i].readOnly;
}

您应该使用属性而不是像其他所有答案所建议的属性。更简洁,更可预测。该readonly属性是布尔值,因此只有它的存在才是重要的,而不是值。

于 2012-12-09T02:22:13.973 回答
1

尝试:

var arr = document.querySelectorAll('[id="'+ntotal+'"]');   
for(var i=0;i<arr.length;i++){
    if(arr[i].getAttribute('readonly')=='readonly')
        arr[i].removeAttribute('readonly');
    else
        arr[i].setAttribute('readonly', 'readonly');
}
于 2012-12-09T00:37:13.370 回答
0

尝试修正命名约定(ID 必须是唯一的,而不仅仅是数字)并使用 getAttribute、setAttribute 和 remove eAttribute 函数。

<input type='text' name='nTotal' value='1' size='5' readonly='readonly' id='text_1'> 
<input type='text' name='nTotal' value='2' size='5' id='text_2'>
var a = document.getElementsByName("nTotal");
for (var i=0;i<a.length;i++){
   isreadonly = a[i].getAttribute("readonly");
    if (isreadonly) {
      a[i].removeAttribute("readonly");                
    }
    else
    {
      a[i].setAttribute("readonly", "true");        
    }
}

刚刚在以下位置设置了一个工作演示:http: //jsfiddle.net/wXbzq/

或者更好的是,使用 jQuery ( http://jquery.com )……你会喜欢的!

要在 jQuery 中禁用:

$('nTotal').removeAttr('readonly');

要在 jQuery 中启用:

$('nTotal').attr('readonly', true);
于 2012-12-09T00:33:35.170 回答