• ベストアンサー

親ウィンドウの<TD>~</TD>内の書き換え方法

子ウィンドウから親ウインドウの表示を書き換えたいのですがどうすればよいのかわかりません。 <FORM name="FORM_1" ethod="post" action="abc.html"> <TABLE> <TBODY> <TR> <TD id="AA">ここに表示</TD> </TR> : : : </TBODY> </TABLE> </FORM> 上記が親ウィンドウのコードの一部ですが、「ここに表示」の部分を子ウィンドウから書き換えたいのですが、子ウィンドウから見たこのセルの指定の記述方法が分かりません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#199778
noname#199778
回答No.3

DOMを利用したDHTML的手法については、先の方の回答にある通りでよいと思いますが、この場合、古いブラウザでは動作しないことも考えられます。 できれば、そういったブラウザでも対応できるように仕掛けをしておくのが良いと思いますよ。 具体的には、DOMに対応しているブラウザ向けにはDOMで、layerを採用しているNetscape4.xxではlayerで、そうでないブラウザに関してはフォーム部品で対応するようにするのが良いと思います。 なお、Netscape4.xxのDHTML技術は特殊なものですので、これを除外するのも無理はない対策になると思います。 DOMの方法については、 if (document.getElementById){ window.opener.document.getElementById("AA")="書き換えるHTMLソース"; } という記述でよいでしょう。 これを関数として定義して実行させれば、DOMを採用しているブラウザではこれを実行し、そうでないブラウザではこれを無視します(エラーにもなりません)。 layerを利用した記述方法は、 if (document.layers){ document.layers["AA"].document.open(); document.layers["AA"].document.write("書き換えるHTMLソース"); document.layers["AA"].document.close(); } このような感じで良かったと思います。 こちらの記述については、手元で確認を取っていないので、あまり当てにならないかもしれません。 先も述べたように、この記述は特殊な存在ですので、切り捨てて考えて構わないかもしれませんね。 フォーム部品で対応するケースですが、あらかじめフォーム部品を用意しておいて(仮にその部品の名前をbox1とすると)、 window.opener.document.FORM_1.box1.value="表示するテキスト"; でいけるでしょう。 こちらの場合、書き換える内容としてHTMLは使用できません。 プレーンテキストで表示されますので、注意してください。 現実的には、DOMでの方法と、フォーム部品を使った方法を併用するのが良いと思います。 具体的には、 <td id="AA">ここに表示</td> となっている部分を <td id="AA"> <script type="text/javascript"><!-- if (!document.getElementById){ document.open(); document.write('<input type="text" name="box1">'); document.close(); } --></script> </td> としておき、子ウィンドウの方のスクリプトは、 function changeTxt(txt){ if (document.getElementById){ window.opener.document.getElementById("AA").innerHTML=txt; } else { window.opener.document.FORM_1.box1.value=txt; } } このような感じにしておけば良いでしょう。 この関数を呼び出す部分は、 <a href="#" onClick="changeTxt('書き換える内容')">リンク</a> このような具合にしておきます。 上記の関数では、渡された引数をセルに表示させますので、関数を呼び出す部分でこれを指定しておく必要があります。 このようにしておくと、DOMに対応しているブラウザではセルの内容を直接書き換え、DOMに対応していないブラウザではinputを書き出して、そこに内容を書き出します。 参考になれば幸いです。

kazu28
質問者

お礼

lead1976さん、ご解答ありがとうございました。 分かりやすい説明の上、DOM未対応のブラウザ対策までコードつき解説していただき、大変助かりました。m(__)m それにもかかわらず、ドジな私はケアレスミスで動作させるのに手間取り、お礼が送れました。 申し訳ありません。 でも、なんとか思い通りに動くようになりました。 が、IE6.0上でしか確認していません。 他のブラウザもインストールして検証する予定ではありますが、DOM非対応の古いブラウザをどうやって入手するかは、これからの課題です。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • nuruhho44
  • ベストアンサー率57% (38/66)
回答No.4

まだ閉じられていなかったので、追加情報記載しておきます。 参考URLのページをご覧ください。とても役立つデータが紹介されてます。 また、ここのブラウザ利用率情報のページの下のほうに、過去のデータが記載されたページへのリンクがあり、そこからネットスケープの旧バージョンがダウンロードできるURLが記載されていますので、ご利用ください。 ちなみに、私はNN4.8(英語版)をダウンロードして自分のホームページを見たところ、背筋が寒くなり、見なかったことにしてNN4.8は証拠隠滅しました。

参考URL:
http://www.zerotown.com/webdata/index.html
kazu28
質問者

お礼

貴重な情報ありがとうございます。 こんな、ページもあるんですね。 実は書きこみをしてから、検索エンジンで検索するとNN4.xはまだダウンロードできるみたいですね。 よく、調べずにあんな書き方をしてしまって・・・ もちろん、ご紹介いただいたページも利用させていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • nuruhho44
  • ベストアンサー率57% (38/66)
回答No.2

ひょっとして私のことでしょうか?あれはDOMという手法です。私も最近勉強し始めたばかりです。 子ウインドウから親ウインドウへの命令には、通常 window.opener を前に付けるようです。 window.opener.document.getElementById("AA").innerHTML =(渡したい内容) という形になりますね。HTML文を渡せますので、<FONT>や<B>や<U>を入れて文字を飾ることもできますし、やったことないですが、たぶん<IMG>も渡せると思います。 これの問題点は、DOMを実装したブラウザでないと効果がないことです。IE4やNN4ユーザーを切り捨てる覚悟で使ってください。 旧ブラウザにも対応したいのであれば、shige_70さんのおっしゃるような方法になります。同ページのlead1976さんの回答をご参考になさってください。 尚、私は以前この方法でやっておりましたが、NN7では文字表示がずれ、Opera7では枠が消せませんでした。スタイルシートの解釈がいい加減なNN4ではどうなるのか想像もつきませんが、こちらの方法をお使いの場合も、出来るだけ多くのブラウザで表示確認なさったほうがいいと思います。

kazu28
質問者

お礼

nuruhho44さん、ご解答ありがとうございます。 > ひょっとして私のことでしょうか? そうです。 hho44さんが以前書きこんでおられたのを見つけけました。 JavaScriptはほとんどコピーして利要する程度で、以前の書きこみから、親ウィンドウのタグを変更するコードに書き換えられませんでした。(^_^;) DOMを実装したブラウザでないと動作しない点もまったく知りませんでしたので助かりました。 アドバイスをもとにいろいろ試してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • shige_70
  • ベストアンサー率17% (168/946)
回答No.1

通常は、htmlの本文を書き換えることはできません。 どうしてもという場合の方法は、 1) cgi等を利用して、子ウィンドウから書き換えたい内容をサーバに送って、サーバ側で内容を書き換えたhtmlを生成して親ウィンドウに表示します。 2) 見た目に問題はありますが、書き換え対象箇所を<input>や<textarea>にすればJavaScriptで書き換え可能です。

kazu28
質問者

補足

解答ありがとうございます。 確かにご解答いただいた方法でも可能だとは思うのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=727735 で、同じフォーム内でhtmlを部分的に書き換えることが可能だと知った為です。 この解答No.1の方で onChange="document.getElementById('AA').innerHTML=document.Application.RATE.value;"> とセル内の値を書き換えています。 これを見ていると、子ウィンドウから該当セルを指定する方法がありそうだったので、質問させていただきました。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • サブウィンドウから親ウィンドウのフォームへの書き込み

    よろしくお願いします。 やりたい事は サブウィンドウを開いて サブウィンドウのテキストボックスに入力した内容を 親ウィンドウのテキストボックスに書き込みたいのです。 以下親ウィンドウ(oya.html) <html> <head> <script type="text/javascript"> <!-- function search(){ window.open( 'sub.html' ,'childwin', "width=350,height=250,location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes" ); } --> </script> </head> <body> <form name="mainform" method="POST" action="hoge.php"> <TABLE border="1"> <TR> <TD>A:<INPUT type="text" name="A" id="A"></TD> </TR> <TR> <TD>B:<INPUT type="text" name="B" id="B"></TD> </TR> <TR> <TD><input type="button" onclick="search();return false;" value="サブウィンドウ"></TD> </TR> <TR> <TD><center><input type="submit" name="exec" value="確認"></center></TD> </TR> </TABLE> </form> </body> </html> 以下サブウィンドウ(sub.html) <html> <head> <script type="text/javascript"> <!-- --> </script> </head> <body> <form name="subform"> <TABLE border="1"> <TR> <TD>A:<INPUT type="text" name="A" id="A"></TD> </TR> <TR> <TD>B:<INPUT type="text" name="B" id="B"></TD> </TR> <TR> <TD><input type="button" value="入力"></TD> </TR> </TABLE> </form> </body> </html> 以上です。親ウィンドウの中にformが入れ子状態になってしまうため javascriptで対応できないのかと思い質問させて頂きました。 ご教示お願いいたします。

  • jQuery.cloneのsubmitについて

    PG初心者です。 ご意見を頂きたく発言しました。 Windows、JSPで開発しています。 jQueryを使って[追加]ボタンクリック時に<table>の<tr>をcloneしています。 ※cloneした<tr>に含まれるオブジェクト ( id , name ) は、そのタイミングで一意になるように変更しています。 ここまでは、問題なく処理できるのですが、 この後、cloneしたオブジェクトをsubmitすると、送れないんです...受け取れないんです。 submit処理の内容としては、 ※08~11がcloneで追加した<tr>です。 --------------------------------------- 01:<form id='f' method='POST' action='syori.jsp'> 02:<table> 03:<tbody> 04:<tr> 05: <td id='r1cd' name='r1cd'>123</td> 06: <td id='r1nm' name='r1nm'>あいうえお</td> 07:</tr> 08:<tr> 09: <td id='r2cd' name='r2cd'>456</td> 10: <td id='r2nm' name='r2nm'>かきくけこ</td> 11:</tr> 12:</tbody> 13:</table> 14:</form> --------------------------------------- $("#f").submit(); とすると、( r1cd ) と ( r1nm ) しか送られないんです。 何故なんでしょうか??? ちなみに、他にもJSPファイル作成(画面表示)時に、 オブジェクトを append しているのですが、 そのオブジェクトは正常にPOSTされるんです... 違いといえば、JSP作成時に作っているか、 画面表示後、動的に作っているかという違いなのですが...よくわかりません。 イベント自体であれば、live などを用いれば動きますが、 form内のオブジェクトを増減したことによって、 何か処理の記述が異なるんでしょうか? 大変困っております、何卒教えて頂けますか?

    • ベストアンサー
    • Java
  • </td><td>で改行されてしまうのは何故ですか?

    以下、IE8で閲覧したときのみ [登録を許可する] と [拒否する] の ボタンが改行されて表示されてしまいます。 <td>登録を許可する</td><td>拒否する</td>としているので、 改行されるのはおかしいと思うのですが、IE8のバグでしょうか? ちなみに、Firefox や Safari などでは二つのボタンは改行されず、 横並びできちんと表示されます。 また、以下ソース先頭のドキュメント宣言を削除すると、IE8でも 二つのボタンは改行されず、横並びで表示されます。 (多少上下位置がズレますが・・・) <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <body> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr><td> 現在 <b>1件</b> の登録申請が出ています。<br /> そのうちの <b>1番目</b> の申請です。<br /><br /> <form method="post" action="./ps_admin.cgi"> <input type="hidden" name="act" value="reg2" /> <input type="hidden" name="page" value="0" /> <input type="hidden" name="pass" value="" /> <table border="0" cellpadding="0" cellspacing="0" style="text-align:left"> <tr><td> <table border="0" cellpadding="4"> <tr> <td bgcolor="#ffffff">▼お名前<br /> &nbsp;test</td> </tr> <tr> <td bgcolor="#ffffff">▼メールアドレス<br /> &nbsp;test<br /><br /></td> </tr> <tr><td bgcolor="#ffffff"><hr color="#444444"></td></tr> <tr> <td bgcolor="#ffffff"><br />▼サイト名<br /> <input style="width : 262px;" type="text" name="sitename" value="test" size="50" /></td> </tr> <tr> <td bgcolor="#ffffff">▼サイトURL<br /> <input style="width : 362px;" type="text" name="siteurl" value="http://" size="70" /><br /> <a href="" target="_blank">ページを見るときはこのリンクから</a></td> </tr> <tr> <td bgcolor="#ffffff">▼バナー<br /> &nbsp;無し <input type="hidden" name="sitebanner" value="" /> </td> </tr> <tr> <td bgcolor="#ffffff">▼サンプルURL<br /> &nbsp;無し <input type="hidden" name="sampleurl" value=""><br /><br /> </td> </tr> <tr> <td bgcolor="#ffffff">▼コメント<br /> <textarea style="width : 441px;" cols=70 rows=4 name="sitecomment">これはテストです。</textarea></td> </tr> <tr> <td bgcolor="#ffffff">▼キーワード<br /> <input style="width : 362px;" type="text" name="sitekeyword" size=70 value="テスト" /></td> </tr> <tr> <td bgcolor="#ffffff">▼管理人へのコメント<br /> &nbsp;<br /><br /></td> </tr> </table> <table> <tr><td> <input type="hidden" name="name" value="test" /> <input type="hidden" name="email" value="" /> <input type="hidden" name="npass" value="" /> <input type="submit" value="登録を許可する" /> </form></td> <td align="left"> <form method="post" action="./ps_admin.cgi"> <input type="hidden" name="act" value="reg3" /> <input type="hidden" name="page" value="0" /> <input type="hidden" name="pass" value="" /> <input type="hidden" name="name" value="test" /> <input type="hidden" name="sitename" value="test" /> <input type="submit" value="拒否する" /></form></td> </tr></table></td></tr></table> </td></tr> </table> </body> </html> IE8でのXHTML表示関連のバグでしょうか? 解決できず大変困っています。 どなたか原因がおわかりになる方がおられましたら 解決策をお教え頂ければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • html table の中のボーダーが二重になる

    初歩的な質問ですが、テーブルタグに、線をつける際に、枠だけついたり、下記のように記述しても、 真ん中のtr もしくは th や td の上下か左右がかぶってしまい、局所的に2本になってしまいます。(他に比べて太くなります。) .book_form tbody tr .mailform, .book_form tbody tr .mailtext { border: 1px solid #666; } すべてのラインを1本にして、きれいに見せるにはどのようにしたいいでしょうか。 ちなみに、<table class="book_form" border="1" bordercolor="#666"cellspacing="0" cellpadding="3"> こちらでもうまく表示されません。 CSSでの記述があるものだと助かります。 構成は、 <table> <tbody> <tr></tr> <th></th> <td></td> </tbody> </table> です。

    • ベストアンサー
    • HTML
  • 子画面から親画面に値を返す方法

    親画面で入力した内容をPOST後 子画面に表示して(表示のみ、モーダル状態)内容を確認して ボタンで【OK】か【キャンセル】を押下して親画面に何が押下されたか 戻したいです。 私なりに考えて見ましたが、子画面からの戻し方がよく わかりません。 よろしくお願いします。 親画面 【oya.php】 <? session_start(); if($_POST["CHK"]){ $_SESSION["item1"] = $_POST["item1"]; $_SESSION["item2"] = $_POST["item2"]; returnValue = showModalDialog("ko.php"); //子画面の戻り値が【OK】のときDBに登録処理をする //【OK】でないときはそのまま } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="oya.php" method="post"> <table width="70%" align = "center" cellspacing="0"> <tr> <td align="right">入力項目1</td> <td><input type="text" name="item1" size="10" maxlength="10" value = "<? echo $item1 ?>"></td> </tr> <tr> <td align="right">入力項目2</td> <td><input type="text" name="item2" size="10" maxlength="10" value = "<? echo $item2 ?>"></td> </tr> <tr> <td> <input type="submit" name="CHK" value="確認"> </td> </tr> </table> </form> </body> </html> 子画面 【ko.php】 <? session_start(); ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>確認画面</title> <link rel="stylesheet" href="./css/style.css" type="text/css" /> </head> <body> 確認後「OK」OR「キャンセル」を押して下さい。 <table width="70%" align = "center" cellspacing="0"> <tr> <td align="right">入力項目1</td> <td><input type="text" name="item1" size="10" maxlength="10" value = "<? echo $_SESSION["item1"] ?>" readonly="readonly"></td> </tr> <tr> <td align="right">入力項目2</td> <td><input type="text" name="item2" size="10" maxlength="10" value = "<? echo $_SESSION["item2"] ?>" readonly="readonly"></td> </tr> </table> </body> </html>

    • ベストアンサー
    • PHP
  • POST GET HTTP 404 未検出

    POSTメソッドとGETメソッドの混在したFORMで404エラーとなります。 具体的には、次のようなFORMを考えています。 <form action="login.php?hoge=hogehoge" method="POST"> <table border="0"> <tr><td>ユーザ名</td><td><input type="text" name="name"></td></tr> <tr><td>パスワード</td><td><input type="password" name="pass"></td></tr> <tr><td colspan="2"><input type="submit" value="ログイン"></td></tr> </table> </form> Windows XPではうまく機能するのですが、 Vineではうまくいきません。「HTTP 404 未検出」となります。 どうしたらいいのかさっぱり分からない状態です。 エラーの原因を教えていただければと思います。 詳しい環境: OS:Vine PHP:5.2.8 Apache:2.0

    • 締切済み
    • PHP
  • フォームで確認画面を表示させるにはどうすればいいのでしょうか?

    質問をご覧下さりありがとうございます。 <form action="18add.php" method="POST" name="form1"> <table> <tr> <th>番号(半角数字)</th> <td><input type="text" name="number" value=""></td> </tr> <tr> <th>名前</th> <td><input type="text" name="name" value=""></td> </tr> <tr> <td><input type="hidden" name="mode" value="add"></td> <td><input type="submit" name="submit" value="追加"></td> </tr> </table> </form> htmlでこんなフォームを作り、phpで $table_body = ""; if( isset( $_POST['mode'] ) ){ $mode = $_POST['mode']; $number = $_POST['number']; $name =$_POST['name']; } else{ $mode = ""; $number = ""; $name = ""; } if( $mode == "add" ){ $table_body .= "<tr>"; $table_body .= "<td>"; $table_body .= $number; $table_body .= "</td>"; $table_body .= "<td>"; $table_body .= mb_convert_encoding( $name, "SJIS", "EUC-JP" ); $table_body .= "</td>"; $table_body .= "</tr>"; } で一度入力された情報を確認する画面を作りたいのですが うまくいきません。 初心者なのでわかりやすく説明をつけてくださると大変助かります。

    • 締切済み
    • PHP
  • セレクトボックスの内容を次のページで受け取る方法

    <form action="./check.asp" method="POST"> <table> <tr> <td> <select name="year"> <option value="2006" >2006</option> <option value="2007" >2007</option> <option value="2008" >2008</option> </select> </td> </tr> <tr> <td align="center"><input type="submit" value="確認する"></td> </tr> </table> </form> として 次のページで YEAR =Trim(request("year")) Response.Write YEAR で受け取り表示しようとしていますが取れません。なぜですか?教えてください

  • フォーム htmlで項目をセット

    下記フォームのページがあります。 http://hogehoge.com/form.html <form action="#" method="post"> <table border="1"> <tr> <td>名前</td> <td><input type="text" name="name"></td> <td colspan="2" align="center"> <input type="submit" value="入力"> </td> </tr> </table> </form> </body> </html> このフォームに http://hogehoge.com/form.html?name=xxx でアクセスすると、 nameの項目に xxxが入力されて表示できるようにアクセスする事は可能なのでしょうか? 恐れ入りますが、ご教授お願い致します。

    • ベストアンサー
    • HTML
  • file upload でリセットが効かない

    WEBプログラミング初心者でよくわからないので、教えてください。 以下のHTMLで、一旦ファイルを参照しテキストにファイルパスが表示された後、リセットして空白にしても、アップロードをクリックすると、ファイルがアップロードされてしまいます。リセットできないのでしょうか? <form enctype="multipart/form-data" action="XXXXX.php" method="POST"> <table border="0" cellspacing="0"> <tbody> <tr> <td height="30"><input type="submit" value="ファイルをアップロード" name="btnUpload"></td> <td height="30"><input type="reset" value="リセット" name="btnReset"></td> </tr> <tr> <td height="30"><div align="center"><font size="3">在庫CSVファイル:</font></div></td> <td height="30"><input type="file" name="ZaikoUploadfile"></td> </tr> <tr> <td height="30"><div align="center"><font size="3">入庫CSVファイル:</font></div></td> <td height="30"><input type="file" name="NyukoUploadfile"></td> </tr> </tbody> </table> </form>

このQ&Aのポイント
  • LIFEBOOK U938/T TypeCの充電に関する問題が発生しています。
  • 付属のACアダプタには19V-2.1Aと記載されており、マニュアルにはUSB Power Deliveryに対応していると明記されています。
  • しかし、USB Type-Cから充電できず、バッテリ充電ランプも点灯しない問題があります。60W充電器でないと充電が認識されない可能性があります。
回答を見る