生成したlayerに、idやnameを設定するには?

[上に] [前に] [次に]
にょろにょろ 2000/03/01(水) 00:09:49
Bodyのロード後(<LAYER>がない状態)にボタンを押し、

var myLayer = new Layer() ;

という形で新規レイヤーを作成しようと思います。

この方法で複数のレイヤーを作ると、
_js_layer_1
_js_layer_2

のようなname、idになりますが、これを任意の名前(Lay1_2、Lay3_1など)
に設定する方法はないのでしょうか?

 これでも規則正しい連番になってくれれば少しはましなのですが、
番号が1から始まるとは限らないようで、うまく扱えません。

 また、ユーザーが指定した数のレイヤーを設定するつもりなので、
document.writeでタグを書き出す方法も使えそうにありません。

zizz... [HomePage] 2000/03/02(木) 20:38:26
多分ないでしょう。

var myLayer = new Layer();

でレイヤーを作ったのなら、myLayer で参照しては駄目なのですか?

ところでLayer コンストラクタって第一引数が必須ではありませんか?

zizz... [HomePage] 2000/03/02(木) 22:00:04
Layer コンストラクタを直接使って作成したレイヤーの名前について、Mozilla Classicのlibmochaで少し調べてみました。

やはり
_js_layer_
に数字の入った変数をつなげて適当に名前を作成しています。
初期値が0の static な変数で、レイヤーを作成するたびにインクリメントしています。
ページが移ってもこの変数はリセットされないので、数字はひたすら増えつづけるはずです。

にょろにょろ 2000/03/03(金) 01:16:54
[[解決]]
>多分ないでしょう。
 あぁ、いきなり死刑宣告が……(^^;。

>var myLayer = new Layer();

>でレイヤーを作ったのなら、myLayer で参照しては駄目なのですか?
>ところでLayer コンストラクタって第一引数が必須ではありませんか?

 なるべく簡単な質問にしようとして、省略しました(^^;。実際には、
「myLay1_1〜myLay4_5」みたいにXY座標形式の名前をつけたレイヤーを
作ろうと思い、以下のようにしています。


//レイヤーを作る関数
function MakeMyLayer(レイヤー名,幅,高さ){
  var myLayer ;
  if (nn){
    myLayer = new Layer(幅);//引数がわからないので、適当(^^;
    myLayer.resizeTo(幅, 高さ);
    return myLayer;
  }else if(ie)
    document.body.insertAdjacentHTML("BeforeEnd",<div id="レイヤー名"〜>);
    return document.all(レイヤー名);
  }
}

//縦と横のサイズを指定したボタンをクリックして、レイヤーを生成
function ButtonClick(myX, myY) {
  for(i=1;i<=myX;i++){
    for(j=1;j<=myY;j++){
      MakeMyLayer(("myLay"+i+"_"+j),120,80);
    }
  }
}

 そして、以下のようなありがちな方法で利用したいと思ってました。

function getLayerObject(レイヤー名){
  if(nn)
    return document.layers[レイヤー名]
  else if(ie){
    return document.all(レイヤー名)
  }
}

 この方法だと、レイヤーに任意の名前をつける必要があったんです……。


>初期値が0の static な変数で、レイヤーを作成するたびにインクリメントしています。
>ページが移ってもこの変数はリセットされないので、数字はひたすら増えつづけるはずです。

 どうりでShiftを押しながらリロードしても、妙な動作をするわけです。
……これでは対処不能ですね。

 これで思うような動作は期待できないとはっきりしたので、「解決」と
させていただきます。zizz...さん、ありがとうございました。

zizz... [HomePage] 2000/03/03(金) 20:58:21
function MakeMyLayer(layer_name,幅,高さ){
  var myLayer ;
  if (nn){
    myLayer = document.layers[layer_name] = new Layer(幅);//引数がわからないので、適当(^^;
    myLayer.resizeTo(幅, 高さ);
    return myLayer;
  }else if(ie) {

でどうですか?
レイヤーの名前が衝突する場合は、上手くいきませんが、
自動で追加された LayerArray オブジェクトのプロパティーは Read Only なので仕方ありません。

にょろにょろ 2000/03/04(土) 01:17:19
>myLayer = document.layers[layer_name] = new Layer(幅);

>でどうですか?

 考えていた通りの、指定した名前のレイヤーを作ることが出来ました。
レイヤーの名前が衝突する場合を考え、チェックを入れて

if (!document.layers[layer_name]){//指定した名前のレイヤーが存在しない場合
  myLayer = document.layers[layer_name] = new Layer(layer_width);
}

のように使おうと思います。今度こそ解決しました(^^;。


 zizz...さん、本当にありがとうございました。

[上に] [前に] [次に]