2

textbox1以下 のIDでtextareaのテキスト配置を変更するスクリプトがあります。

 // <![CDATA[
 function alignFix() {

 document.getElementById("textbox1").style.textAlign="left";

 }
 // ]]>

マークアップは次のとおりです。

 <textarea cols="36" rows="25" readonly="readonly" id="textbox1" name="textbox" style="text-align: center;">dynamic text populates via another script unrelated to problem</textarea>

トリガーは次のとおりです。

 <select class="c9" onchange="showCenterTemplates(this); alignFix();">

それはうまく機能します。現在、このスクリプトを実行するために必要なテキストエリアが複数あるので、それは単純な切り替えであると思いましdocument.getElementByIddocument.getElementsByTagNameが、私の無知/驚きへの切り替えはあまりうまくいきませんでした。

質問やフォーラム、Googleを検索したところ、document.getElementsByTagNameの動作例が見つかりましたが、必要な方法では見つかりませんでした。

を使用するときはgetElementsByTagName、常に変数を宣言する必要があるようです(これが本当かどうかを誰かが確認できますか?)ので、私は試しました:

 // <![CDATA[
 function alignFix() {

 var textbox = document.getElementsByTagName('textarea');
 style_textbox = textbox.style;
 style_textbox.textAlign="left";
 }
 // ]]>

しかし、style_textbox is null or not an objectそれでテスト時にエラーが発生します。誰か助けてくれませんか?よろしくお願いします。

PSスクリプトの理由は、テキスト領域の元のコンテンツを中央に配置する必要があるためですが、ユーザーがスクリプトを使用して<select>動的に入力するためにからテンプレートを選択し始めると、それらのテンプレートは、内に左揃えのテキストを持っている必要があります。それが理にかなっていることを願っています。<textarea>showCenterTemplates()<textarea>

4

1 に答える 1

6

getElementsByTagNameは要素の配列を返すため、ループする必要があります。

var i,j, textbox = document.getElementsByTagName('textarea');
for (i=0, j=textbox.length; i<j; i++) {
    textbox[i].style.textAlign='left';
}

編集:コメントのリクエストごとに、簡単な説明:

  • 配列のサイズに達しない限り、iは0(ゼロ)からインクリメントされます
  • textboxは配列であり、textbox.lenghtはそのサイズを返します
  • すべてのiについて(iは0、iは1など)textbox[i]は配列内の位置を表します
  • 配列はHTML要素で埋められているため、配列内のすべての位置は要素であり、スタイル属性があります
于 2011-09-10T00:51:05.793 に答える