- - PR -
JavaScript
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-07 17:23
ボタンをクリックしたら、frame内に最新の情報を表示するアプリを作成しました。
表示方法は、GETでパラメータをCGIアプリ(c++)に渡して、iframe内に情報をはき出しています。で、はきだした情報の件数を inputタグのhiddenに持ち、その値を親フレームのテキストエリアに表示させたいのですが、うまくいきません。 onclickのイベントで、 ABC(iframeのame).location.href="HYOUJIG.EXE?FORM=FOOM" + "&ACTION=1" +・・・ を行い、その中の件数(DATACNT)を dcnt = ABC.document.getElementById("DATACNT"); dc = dcnt.value; var divObj = document.getElementById("KEN); divObj.innerText = dc; という感じで表示させてるのですが、内容が一つ前の情報・・・というか、 最新の情報の取得が間に合わないようです。 まず、iframe内の表示をし、それが終わったら 最新件数を表示させるにはどうしたらいいのでしょうか。 親フレームに表示させる前にalertをいれて動かしてみたら、 alertが先に動き、その後に iframe内の表示をしました。 (順番が違う・・・) iframe内の onLoad()が使えればいいのでしょうが ある関数を使用しているため、onLoadを使うとその関数が効かなくなるので使えません。 どんなアドバイスでもいいので よろしくお願いします!!! | ||||||||
|
投稿日時: 2008-06-07 19:23
>親フレームに表示させる前にalertをいれて動かしてみたら、
>alertが先に動き、その後に >iframe内の表示をしました。 >(順番が違う・・・) 具体的に何をどーしているのですか? >iframe内の onLoad()が使えればいいのでしょうが >ある関数を使用しているため、onLoadを使うとその関数が効かなくなるので使えません ある関数ってなんですか?onload を使うと何がダメなのか教えてください。 # | ||||||||
|
投稿日時: 2008-06-07 21:04
ボタンをクリックしたら 下記のようなzzz()が動きます。
function zzz{ // iframeに表示 ABC.location.href="HYOUJI.EXE?FORM=FOOM" + "&ACTION=1" +・・・ ; ★★ alert("koko"); // テキストエリアに最新件数を表示 dcnt = ABC.document.getElementById("DATACNT"); dc = dcnt.value; var divObj = document.getElementById("KEN); divObj.innerText = dc; } ★★の部分にalert("koko"); を入れてみたら iframeを表示 ABC.location.href="HYOUJI.EXE?FORM=FOOM" + ・・・ する前に alertウインドウが表示され、 「OK」を押したらiframe内に最新情報を表示しました。 HYOUJI.EXEの方が前に欠いてあるのに、動くのが遅いのです。 >ある関数ってなんですか?onload を使うと何がダメなのか教えてください。 iframe内にテーブル形式でデータを表示してるのですが、そのテーブルの先頭行が見出しになっていて、見出しはスクロールしないで固定表示させたまま、データだけをスクロールさせる関数です。(どなたかが作られたJavaScriptを使わせていただいています。) その関数を使う場合onLoad()があると、見出し部分が2行表示されてしまうので、onLoad()は使えないのです。(使わないでください・・・と注釈がありました) よろしくおねがいします。 | ||||||||
|
投稿日時: 2008-06-07 22:33
まず、確認して下さい。
(1)HTML を2つ用意する(*1 と *2)。 (2)*1 に <iframe> を用意し、src に *2 を指定する。 onreadystatechange="alert(this.readyState)" イベントを追加すること。 (3)*2 の onload で alert("OK") を表示するようにして下さい。 *1 を表示したとき、 [1] complete / OK / interactive と表示された場合 onreadystatechange を使ってください。 [2] complete / interactive / OK と表示された場合 ヘッダ固定するスクリプト側の onload を attachEvent に変更して下さい。 # ローカルで試すと loading ってのも出てくるのね。 # 答えは [1] です。 # 詳細は、onreadystatechange をぐぐってみて下さい。 # で、作業は、interactive 通知の時に行います。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-07 22:35 ] [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-07 22:39 ] [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-07 22:43 ] | ||||||||
|
投稿日時: 2008-06-07 22:59
# サッカー負けそう・・・
IE と 他のブラウザでは挙動が異なるかもしれません。 他も対応なら個別で調査してから実装して下さい。 IFRAME 内コンテンツの何かを利用したい場合は、直接その何かに アクセスしようとするのではなくて、getXXX() なりメソッドを用 意しておくと良いでしょう。 | ||||||||
|
投稿日時: 2008-06-07 23:44
ぴあちゃんさん、ありがとうございます。
function zzz() { var o = ABC.document.getElementById("IFRAME1"); o.onreadystatechange = function() { if (this.readyState == "interactive") { //何か処理 dcnt = ABC.document.getElementById("DATACNT"); dc = dcnt.value; ★ var divObj = document.getElementById("NEWCNT"); divObj.innerText = dc; } }; o.src = "HYOUJI.EXE?..."; } で、試してみました。 ★のところでエラーになりました。 IFRAME内には「DATACNT」が常時設定されていて、最新情報が表示され、値が変わったら var divObj = document.getElementById("NEWCNT"); divObj.innerText = dc; をやりたいのですが、使い方が間違ってるでしょうか。。。 >var o = ABC.document.getElementById("IFRAME1"); >o.onreadystatechange = function() { は、IFRAME1を監視ですよね? IFRAME内のid、「DATACNT」の値が変わったら・・・なんていう監視はできないのでしょうか。 私にとって、だんだん難しくなってきてしまい、 不勉強で申し訳ありませんが よろしくお願いします。 | ||||||||
|
投稿日時: 2008-06-08 02:02
>★のところでエラーになりました。
だから何? です。 鵜呑み・コピペはやめてください。 以下のサンプルで理解できたら、自分のコードに組み込んで結果を教えて下さい。 「出来ました、ありがとうございます」ってのは無しです。
訂正: //alert(document.getElementById("IFRAME1").window.getXX); //IFRAME て getElementById じゃ取れないの? document.getElementById("IFRAME1").contentWindow.getXX ですね。 [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-08 02:41 ] [ メッセージ編集済み 編集者: ぴあちゃん 編集日時 2008-06-08 03:02 ] | ||||||||
|
投稿日時: 2008-06-08 16:37
ぴあちゃんさん、ありがとうございます。
理解できていないので、鵜呑み・コピペでしかできず、そこから理解できれば・・・と思ったのですが、思ってもいないところでエラーになってしまったので・・・失礼しました。 なるべく理解しながら・・と取り組んでいますが、なかなか難しくまだ時間がかかりそうです。 IFRAME内に吐き出す方だけ組み込んでみましたが、onloadを使うとやはりテーブルの見出しが2行になってしまうので、onloadではない方法を考えないとダメだと思っています。 取り急ぎのご報告でした。 |
1|2|3
次のページへ»