親ウィンドから子ウィンドへのデータの受け渡し方法で以下に簡単に記述致します。
親
<input・・・name="IN1"・・・>
<input・・・name="IN2"・・・>
<input・・・name="IN3"・・・>
子
for (i=1,i<=3,i++) {
window.opener.document.form名.IN'+i+'.value = eval('form.IN'+i+'.value');
}
<form・・・
<input ・・・name="IN1"・・・>
<input ・・・name="IN2"・・・>
<input ・・・name="IN3"・・・>
として渡したいのですが、
window.opener.document.form名.IN'+i+'.valueの"+i+"の指定でエラーとなってしまいます。エラー内容は『'+i+の'の後に;がありません』です。どのように指定すれば宜しいのでしょうか?
No.7
- 回答日時:
ごめんなさい、
ご提示のソース、どうもバグバグしていて、なにをやりたいかいまいち
理解できません。
ポストをベースに親子間でデータのやりとりをやるならjavascriptは不要です。
中途半端につかうくらいならすべてPHPでやってしまったほうがよいのでは?
ちなみにここはjavascriptのカテなのでjavascriptなら#5で十分だと思います。
PHPベースに切り替えるなら混乱をさけるためここを閉じてPHPのカテできいてください
No.6
- 回答日時:
サーバー側のプログラムはPHPということでしょうか?
であれば・・・
cForm['IN<?=$_GET['line'];?>'].value = pForm['IN<?=$_GET['line'];?>'].value;
のようなやり方にしてはいかがでしょうか?
(厳密にはもうチョイ工夫が必要そうですが)
ただ、たとえばjavascriptを外部ファイル化したりすることまで
視野に入れると、GETでの値の受け渡しはあまり美しくないと思います。
今回の命題が入力ダイアログということであれば、ある程度javascript
限定の機能でよろしいかと。
(javascriptが使えないならparentウィンドウで入力すれば済むので。)
GETの取り込みはできるようになりました。有難う御座いました。
質問当初は子ウィンドより親ウィンドに渡せればいいと思っていたのですが、本当は最初に親⇒子に渡し、再度子⇒親がBestですので、ここまできたら何とか仕上げたいと思います。
宜しければ、教えていただけますか。
//parent.htm
<form id="parent_form0">
<?php
for ($i=1; $1<=##; $i++) {
print "<input type=\"hidden\" name=\"max".$i."\" value=\"2\" />";
print "<input type=\"text\" name=\"A_IN".$i."_1\" value=\"$_POST['A_IN'.$i]\" />";
print "<input type=\"text\" name=\"A_IN".$i."_2\" value=\"$_POST['A_IN'.$i]\" />";
print "<input type=\"hidden\" name=\"max".$i."\" value=\"3\" />";
print "<input type=\"text\" name=\"A_IN".$i."_1\" value=\"$_POST['A_IN'.$i]\" />";
print "<input type=\"text\" name=\"A_IN".$i."_2\" value=\"$_POST['A_IN'.$i]\" />";
print "<input type=\"text\" name=\"A_IN".$i."_3\" value=\"$_POST['A_IN'.$i]\" />";
}
?>
</form>
//child.htm
<script>
window.onload=function(){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
var line = <?php print $_GET['line'] ?>;
var max = pForm['career_kensu'+line].value; 取り込めます
form['max'].value = opnerform['career_kensu'+line].value; 取り込めません
for(var i=1;i<=max;i++){
cForm['IN'+i].value = pForm['A_IN'+line+'_'+i].value;
}
for(var i=0;i<pForm.length;i++){
if(pForm[i].type=="text" && pForm[i].name.match(/A_IN'+line+'_[0-9]*/) && cForm[pForm[i].name])
cForm[記述がわかりません].value = pForm[i].value;
}
}
</script>
<form id="child_form0">
<?php
print "<input type=\"hidden\" name=\"max\" value=\"$_POST['max']\" />";
for ($1=1; $1<=$max; $i++;>
print "<input type=\"text\" name=\"IN".$i."\" value=\"$_POST['IN'.$i]\" />";
}
?>
</form>
No.5ベストアンサー
- 回答日時:
>i<=3の3の部分が不確定なら、
そうなると場合分けをしっかりしたほうがよいでしょう。
まずinput要素のtextタイプをしらべ、一致するものがあれば
受け渡すというやり方がベターかと。
(下の例ではわざと、親子間に存在しない要素をいれときました。)
>0123となってしまう
型が認識されてないようなのでparseIntしてみてください
//parent.htm
<form id="parent_form0">
<input type="text" name="IN1">
<input type="text" name="IN3">
<input type="text" name="IN01">
<input type="text" name="IN100"><br />
合計:<input type="text" name="total">
<input type="button" value="childを開く" onClick="window.open('child.htm','_blank')">
</form>
//child.htm
<head>
<script>
window.onload=function(){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
for(var i=0;i<pForm.length;i++){
if(pForm[i].type=="text" && pForm[i].name.match(/IN[0-9]*/) && cForm[pForm[i].name])
cForm[pForm[i].name].value = pForm[i].value;
}
}
function c2p(cForm){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
var total = 0;
for(var i=0;i<cForm.length;i++){
if(cForm[i].type=="text" && cForm[i].name.match(/IN[0-9]*/) && pForm[cForm[i].name]){
pForm[cForm[i].name].value = cForm[i].value;
total += parseInt(cForm[i].value);
}
}
if(pForm['total']) pForm['total'].value=total;
}
</script>
</head>
<body>
<form id="child_form0">
<input type="text" name="IN1">
<input type="text" name="IN2">
<input type="text" name="IN01">
<input type="text" name="IN100">
<input type="button" value="parentに値を渡す" onClick="c2p()">
</form>
</body>
毎回、ご丁寧な記述でわかり易く、有難うございます。
parentでちゃんと受け渡すことができました。
申し訳御座いません。
質問の記述が間違っておりました。
<input type="text" name="IN3">
の値のみ参照したい場合、現在$_GET['line']で3を渡す方法を考えております。その再、
window.onload=function(){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
cForm['IN'+line].value = pForm['IN'+line].value;
}
}
となると思うのですが、window.onload時点で$_GETの値を参照する方法がネット検索してもわからないのですが。$_GETで渡す方法はキレイではないかもしれませんが、宜しければお願い致します。
※ちなみに先程の回答の意味あいは「length」が理解不足だよ思いますが、流れ的には理解はできたと思いますので、勉強になりました。
No.4
- 回答日時:
読み間違えました申し訳ないです。
「親から子」でしたね。
こんな風にしてください
//parent.htm
<form id="parent_form0">
<input type="text" name="IN1">
<input type="text" name="IN2">
<input type="text" name="IN3">
<input type="button" value="childを開く" onClick="window.open('child.htm','_blank')">
</form>
//child.htm
<script>
window.onload=function(){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
for(var i=1;i<=3;i++){
cForm['IN'+i].value = pForm['IN'+i].value;
}
}
function c2p(cForm){
var pForm=window.opener.document.getElementById('parent_form0');
for(var i=1;i<=3;i++){
pForm['IN'+i].value = cForm['IN'+i].value;
}
}
</script>
<form id="child_form0">
<input type="text" name="IN1">
<input type="text" name="IN2">
<input type="text" name="IN3">
<input type="button" value="parentに値を渡す" onClick="c2p(this.form)">
</form>
データの受け渡しができました、ホントありがとう御座いました。
ちなみに、
window.onload=function(){
var pForm=window.opener.document.getElementById('parent_form0');
var cForm=document.getElementById('child_form0');
for(var i=1;i<=3;i++){
cForm['IN'+i].value = pForm['IN'+i].value;
}
}
の部分は、親から子への受け渡しだと思うのですが、
i<=3の3の部分が不確定なら、
max=pForm['親のname'+i].value;
でいけるのでしょうか?
あと、実際は
function c2p(cForm){
var pForm=window.opener.document.getElementById('parent_form0');
var total = 0;
for(var i=1;i<=3;i++){
pForm['IN'+i].value = cForm['IN'+i].value;
total = total + cForm['IN'+i].value;
}
pForm['total'+i].value = total;
}
なのですが、1,2,3と+すると、0123となってしまうのですが、どこか間違っているのでしょうか。間違っているからこうなるのですが。思考錯誤してみましたが、同じ結果になります。
よろしければご教授お願い致します。
No.3
- 回答日時:
formに名前をつけるのはNG(動くものもあるが動作保障外)。
idでやってください。
evalを回避するのは以下のようにしてください。
//parent.htm
<form id="parent_form0['IN'+i].value">
<input type="text" name="IN1">
<input type="text" name="IN2">
<input type="text" name="IN3">
<input type="button" value="childを開く" onClick="window.open('child.htm','_blank')">
</form>
//child.htm
<script>
function c2p(cForm){
var pForm=window.opener.document.getElementById('parent_form0');
for(var i=1;i<=3;i++){
pForm['IN'+i].value = cForm['IN'+i].value;
}
}
</script>
<form id="child_form0">
<input type="text" name="IN1" value="a">
<input type="text" name="IN2" value="b">
<input type="text" name="IN3" value="c">
<input type="button" value="parentに値を渡す" onClick="c2p(this.form)">
</form>
解りやすいご回答有難う御座います。
ちなみに
//parent.htm
<form id="parent_form0">
<input type="text" name="IN1" value="">
<input type="text" name="IN2" value="">
<input type="text" name="IN3" value="">
<input type="button" value="childを開く" onClick="window.open('child.htm','_blank')">
</form>
での受け渡しはできないのでしょうか?
よくわかりませんが、parent_form0には、他の入力項目もありますのでおかしくなってしまわないでしょうか?
No.2
- 回答日時:
#1です。
eval化してる理由がなんとなく見えましたので追記します。
質問文と同じことで、おそらくiをループさせて番号を付与している関係で、使用しているのですね。
トリッキーというかなんというか‥。
eval化は便利そうに見えていろいろ問題を抱えますし、
今回はevalを使わずとも他の方法は十分にあるという感じがしますので、
個人的には使用しない方がいいかと思います。
よくわからないのであれば、evalは使わない方向で考える方が無難です。(クセになるのもよくないので)
ご回答有難うございます。
明日、会社で試してみたいと思います。
開発暦半年くらいで、phpの勉強は多少したのですが、javaはほとんど勉強せず、他を参考に悪戦苦闘しています。基本や理屈がほとんどわかってないので、どうしょうもないですね。
ちなみに、evalを使用しないでの方法を教えていただければ嬉しいです。
No.1
- 回答日時:
'+i+'が文字列になっているけど‥?
そういうことではなくて?
書き間違い?
そういう風にしようと思うとname属性はきびしいかも。
自前で関数つくればそれっぽいものはできるだろうけど。
name属性じゃなくてid属性を使っては?
例えば、
window.opener.document.getElementById("IN" + i) = eval('form.IN'+i+'.value');
//eval化してる理由がよくわからんけど、前後が分からんのでとりあえず放置。
こんな感じで。
getElementsByNameってのもあるけど、IEだったかFFだったか(多分IE)が対応してなかったと思う。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しくフォルダを作成したい
-
doPostBack 関数について
-
【jQuery】input nameの文字列...
-
Formの「action」属性を取得し...
-
JavaScriptで連想配列のマージ
-
ファイル選択ダイアログが表示...
-
プルダウン 項目が多いので先頭...
-
dijit.form.ComboBoxについて
-
return trueとreturn falseの用...
-
javascript による POST 送信時...
-
テキストボックスに入力された...
-
プルダウンメニューを表の中に...
-
VBSでブラウザ上のテキストボッ...
-
ラジオボタンの選択で解答・点...
-
追加ボタンを押した際に ok ボ...
-
netscapeでもinnerTextやinnner...
-
tableの任意行にfocusをあてる
-
value内に変数を入れたい
-
submitするとなぜか2度実行する
-
JavaScriptで特定のtdタグにcla...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
二つの入力欄に、同時に同じ文...
-
新しくフォルダを作成したい
-
name属性のないformタグの、中...
-
入力フォームに半角スペース以...
-
ラジオボタンでクリックした値...
-
ASP.NETでNAME属性を固定にしたい
-
JavaScriptにて動的に配列を作...
-
cookie使用時にundefinedと表示...
-
submitボタン押下時にPOSTされ...
-
Javascriptでのbuttonのname属...
-
エクセル マクロ submitについて
-
jqueryでtextareaのcols、rows...
-
javascriptの値をformのinput h...
-
動的にTabindexの値を変えたい!
-
テキストボックスの入力をリセット
-
ファイル選択ダイアログが表示...
-
現在フォーカスのオブジェクト...
-
ボタンを押すとテキストボック...
-
テキストエリアをenterキーでフ...
おすすめ情報