プロが教えるわが家の防犯対策術!

初めての質問です。よろしかったらお答えください。
複数のインラインフレーム用ページが用意してあり、
テキストボックスに入力した番号によって
任意のページから10個のインラインフレームを順番に配置するようにしたいのです。
ここを参考に作ったのですがうまくいきません。
http://okwave.jp/qa4019868.html

<html>
<head>
<script language="javascript">
<!--
function init(){
var queries=location.search;
if(queries){
var q = queries.replace(/^\?/,'').split('=');
n = eval(q[1]);
}
alert(n);
}

window.onload= init;
// -->
</script>
</head>
<body>
<form action="index.htm" method="get">
<input name="number" type="text" value="">
<input type="submit">
</form>
<script language="javascript">
<!--
for(i=1 ; i<=10; i++)
{
document.write("<iframe src='"+n+".htm'>");
n++;
}
//-->
</script>
</body>
</html>

根本的な所から間違っているのでしょうか?

A 回答 (1件)

よく読み取れませんが・・・



フォームで入力した数字(例えば10)とすると、インラインフレームに10.htm、11.htm・・・19.htmという連番のhtmファイルを表示したいということでしょうか?(どのようなことをしたいのか、いまいち実体がイメージできません)

いっぱいつっこみどころがあるのですが、とりあえず↑の想定があっているとして、以下の事柄を整理して、もう一度見直してみてください。

1)このファイルを表示した時(もちろんフォーム入力前)に、document.writeでiframeを表示しようとしていますが、表示するものがないはず。
2)formのactionがindexhtmとなっているが、それはこのファイルのことでしょうか?(自分自身を再読込みということか)
 index.htmが別にある場合:location.searchの解釈、iframeの出力などはこのファイルには不要でindex.htmに必要なスクリプトです
 再読込みの場合:最初の表示(未入力)と2回目以降の表示(iframeの表示)とを分けて制御する必要があるが、まったく考慮されていない。
3)iframeタグが閉じていないので、ブラウザで正しく認識されない。(IEの場合は適当に判断するみたいですが、これは例外的)
4)ついでながら、連番のhtmlを表示するにしても、何番から何番まで用意してあるのでしょうか。入力値をチェックするなりしないと『ファイルを開けません』の表示ばかりになる恐れがある。(本当に連番のファイルを表示するつもりなのでしょうか?)

ヒントとして・・・
ご提示のスクリプトは、document.writeを実行しようとした時にnの値が定まっていないので、動作がブラウザによって不定です。
『(1)初期値としてnを定義しておくこと(n=1;とか)と、(2)<iframe>タグを閉じること(</iframe>を入れる)』を修正すれば、とりあえず動作すると思われます。
でも、考えているものとは多分違う動作になるとは思いますが、そこを出発点にして確認しながら作っていってもいいかも。

いずれにしろ、やりたいことを一度整理した上で、どのように制御すればよいのかを考えてみることをお勧めします。
    • good
    • 0
この回答へのお礼

丁寧にありがとうございます。
私の説明不足でした。
顧客情報のようなものを連番(顧客ID)のhtmで自動生成しており、それをインラインフレームを並べることで一覧できるようにする事と検索窓に顧客IDを入力するとそのフレームを表示するようにしたかったのです。
テキストボックス内の数字を保持したまま自分自身(index.htm)を再読み込みして、
インラインフレームを生成するという感じなのですがなかなかうまくいきませんでした。
しかしlocation.searchを理解することでなぞが解けました。
試行錯誤の末自分の思い通りの動きになりました。ありがとうございました。
<head>内に書いたスクリプトの変数nと<body>内に書いた変数nは内容を共有できないのですね。

<html>
<head>
<title></title>
</head>
<body>
<form action="index.htm" method="get">
<input name="number" type="text" value="">
<input type="submit">
</form>
<script language="javascript">
<!--
var queries=location.search;
if(queries){
var q = queries.replace(/^\?/,'').split('=');
var n = eval(q[1]);
}
for(i=1 ; i<=10; i++)
{
document.write("<iframe src='"+n+".htm'></iframe>");
n++;
}
//-->
</script>
<iframe src='"+n+".htm'></iframe>
</body>
</html>

お礼日時:2008/09/03 02:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!