表示が上手くされません

[新着] Webテンプレートを仮オープンしました



0   名前: 彗星 : 2006/11/21(火) 17:22  ID:5wAhlTLw
2回目の質問になります。宜しくお願いします。
perlとjscriptを使って、


$k[0]="あ";
$k[1]="い";
$k[2]="う";
$k[3]="え";
for($l=0;$l <= 3; $l++;){
$r[l]=$k[l];
$l++;
}

.
.
.
.
.
.


<script type="text/javascript">
<!--

function j(){

for (i = 0; i < document.all.m1.length; i++) {
document.all.m1(i).innerHTML='$k["+i+"]';
}

}

// -->
</script>

.
.
.
.
.
.


print"
<div id=m1></div>
<div id=m1></div>
<div id=m1></div>
<div id=m1></div>";

というような感じのを作ったんですが、上手く表示されません。"あ"がいっぱい出てきます。
多分、document.all.m1(i).innerHTML='$k["+i+"]';の部分に問題があると思います。
何方か教えてください。

1   名前: m035 ◆Wpzr1YKOiq : 2006/11/21(火) 17:22  [URL]  ID:aiDxbEqs
idは各要素で固有のものでなくてはいけません。
document.allよりも要素にnameで指定し、document.getElementsByNameを使った方がよろしいかと。

>多分、document.all.m1(i).innerHTML='$k["+i+"]';の部分に問題があると思います。
流し読みなので脊髄反射で回答すると、例えばi=0のときは
document.all.m1(0).innerHTML='$k[0]';

となるので「あ」などど表示されないのでは?
document.getElementsByName("m1")[i].innerHTML=$k[i];

のようにしなければ配列としての内容を代入できないはずです。
それでもダメなら、alert($k.join('/'))とでもして配列の内容を確認する必要があるかと。

2   名前: うひょ : 2006/11/21(火) 17:22  [URL]  ID:Tdx04bYt
$k[0]="あ";
$k[1]="い";
$k[2]="う";
$k[3]="え";
for($l=0;$l <= 3; $l++;){
$r[l]=$k[l];
$l++;
}
はPealのソースですよね?
CGI側で代入された配列はJavaScriptで参照することはできません。
CGIで
document.all.m1(i).innerHTML='$k["+i+"]';

と書き出す時点で、この部分は実際に表示されるとき
$k["+i+"] = $k[0] = "あ"
なので、
document.all.m1(i).innerHTML='あ';

となります。これが原因の1つです。

3   名前: 彗星 : 2006/11/21(火) 17:22  ID:aAsdBSK/
ソースの表示で確認したところ、
document.all.m1(i).innerHTML='あ';

のようになっていました。
これだと、iが増加しても、'あ'のままになってしまいますね。
var aa="k["+i+"]";

document.all.m1(i).innerHTML=$+aa;


のようにしても、$がperlの変数として読み込まれて、空白になってしまいました。

何かいい方法はありませんか?

4   名前: うひょ : 2006/11/21(火) 17:22  [URL]  ID:Tdx04bYt
PealとJavaScriptを混同しているようですね。
Pealはサーバーサイドで動き、HTMLファイルそのものを書き出し、渡します。
その後、クライアントサイドでJavaScriptを処理します。
つまり、Peal側の変数の情報はJavaScriptから読み取ることはできません。
受け渡す方法として、PealでJavaScriptの配列を書き出し、
JavaScriptではその配列を読み出せばいいと思います。
たとえば、
<script type="text/javascript">
<!--

の直後にPealで
print "mm=[";
for($l=0;$l<=3;$l++){
     if($l){ print ","; }
     print "\""+$k[$l]+"\"";
}
print "];";

として
for (i = 0; i < document.all.m1.length; i++) {
document.all.m1(i).innerHTML='$k["+i+"]';
}


for (i = 0; i < document.all.m1.length; i++) {
document.all.m1(i).innerHTML=mm[i];
}

に変えればJavaScript側に文字列を受け渡すことができます。
(Pealは最近やってないのでコードに誤りがあるかもしれません。)

5   名前: 彗星 : 2006/11/21(火) 17:22  ID:aAsdBSK/
有難う御座いました。
$monsma1='[';
for($l=0;$l<$mmahono;$l++){
     if($l){ $monsma1.=','; }
     $monsma1.='"';
     $monsma1.="$monstermahol1[$l]";
     $monsma1.='"';
}
$monsma1.=']';
	
	
	print <<"EOM";

<SCRIPT LANGUAGE="JavaScript">
<!--

var mm1=$monsma1;

for (i = 0; i < document.all.m1.length; i++) {
document.all.m1(i).innerHTML=mm[i];
}

.
.
.
.
.
.
.

で、ちゃんと動作しました。
いろいろ教えてくださって、本当に有難う御座いました。

一覧へ戻る