生成した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...さん、本当にありがとうございました。
[上に]
[前に]
[次に]