回答編集履歴

2

追記の質問に回答

2015/03/29 02:16

投稿

PruneMazui
PruneMazui

スコア227

test CHANGED
@@ -7,3 +7,103 @@
7
7
  ```
8
8
 
9
9
  引数fを使いたいのであれば`document.getElementById("txtdata").value`の部分を変更する必要があります。
10
+
11
+
12
+
13
+ ---
14
+
15
+ 追記
16
+
17
+
18
+
19
+ **child.htm(body内)**
20
+
21
+ ```lang-html
22
+
23
+ <script>
24
+
25
+ function sendtoParent(f){
26
+
27
+ var str="";
28
+
29
+ for (var i=0;i<f.length;i++){
30
+
31
+ if(f[i].type=="checkbox" && f[i].checked){
32
+
33
+ str+=(str==""?"":",")+f[i].value;
34
+
35
+ }
36
+
37
+ }
38
+
39
+ opener.document.getElementById("hoge").value=str;
40
+
41
+ opener.document.getElementById("hoge2").value = document.getElementById("txtdata").value;
42
+
43
+ }
44
+
45
+ </script>
46
+
47
+
48
+
49
+ <form>
50
+
51
+ <input type="checkbox" id="data1" value="データ1"><label for="data1">データ1</label>
52
+
53
+ <input type="checkbox" id="data2" value="データ2"><label for="data2">データ2</label>
54
+
55
+ <input type="checkbox" id="data3" value="データ3"><label for="data3">データ3</label><br />
56
+
57
+ <input id="txtdata">
58
+
59
+ <input type="button" onclick="sendtoParent(this.form)" value="親に送る">
60
+
61
+ </form>
62
+
63
+
64
+
65
+ <hr>
66
+
67
+
68
+
69
+ <form>
70
+
71
+ <input type="checkbox" id="data4" value="データ4"><label for="data4">データ4</label>
72
+
73
+ <input type="checkbox" id="data5" value="データ5"><label for="data5">データ5</label>
74
+
75
+ <input type="checkbox" id="data6" value="データ6"><label for="data6">データ6</label><br />
76
+
77
+ <input id="txtdata">
78
+
79
+ <input type="button" onclick="sendtoParent(this.form)" value="親に送る">
80
+
81
+ </form>
82
+
83
+ ```
84
+
85
+ 例えば上記のようにform要素が2つある場合、下側の親に送るボタンをクリックしたときにチェックボックスの値は正しく送られますが、テキストボックスの内容は下で入力した内容ではなく、上で入力した内容が送られます。
86
+
87
+ (ID要素が2つあることはスルーしてください)
88
+
89
+
90
+
91
+ ボタンをクリックしたときにsendtoParent()の引数にクリックした箇所のフォームが渡ります。
92
+
93
+ 先ほど提示したコードでチェックボックスの内容はそのフォームを参照していますが、
94
+
95
+ テキストボックスは引数を見ずにグローバルなテキストボックスを参照しています。
96
+
97
+ ですので、HTML上で最初に出現した箇所のid=txtdataの値が入ります。
98
+
99
+ (試しに<body>タグの直後に`<input id="txtdata">`を追記するとその値が使われると思います)
100
+
101
+
102
+
103
+ 入力したフォームの値を参照したいのであれば引数fで渡ってきたフォームの値を親ウィンドウに渡してあげる必要があります。
104
+
105
+
106
+
107
+ これで回答になりましたでしょうか?
108
+
109
+

1

追記

2015/03/29 02:16

投稿

PruneMazui
PruneMazui

スコア227

test CHANGED
@@ -5,3 +5,5 @@
5
5
  opener.document.getElementById("hoge2").value = document.getElementById("txtdata").value;
6
6
 
7
7
  ```
8
+
9
+ 引数fを使いたいのであれば`document.getElementById("txtdata").value`の部分を変更する必要があります。