3

ボタンを 1 つだけクリックして、同じ 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

試す:

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 に答える
1

他の人が述べたように、クラスを使用する必要があり、後者getElementsByClassNameの代わりに、getElementByIdID が一意であるという仕様に基づいて、最大で 1 つの要素のみが返されます。また、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 に答える
0

命名規則 (ID は数字だけでなく一意でなければならない) を修正し、getAttribute、setAttribute、および removeAttribute 関数を使用してください。

<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 に答える