質問するログイン新規登録

質問編集履歴

11

一文目を追加

2024/05/25 15:17

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,6 @@
1
+ 複数のフォームがあり、それぞれの送信後に異なるページを表示したい。
2
+
3
+ ---
1
4
  どのフォームが送信されたかを識別する方法が不明。3つの異なるアプローチは期待通りに動作しませんでした。
2
5
  1. button要素(type属性button)のidをクリックイベントから受け取ります: 何も起こりません。
3
6
  2. button要素(type属性submit)のidをクリックイベントから受け取ります : 「スクリプトが完了しましたが、何も返されませんでした」

10

書式の改善

2024/05/25 15:10

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
@@ -1,1 +1,1 @@
1
- formごと異なる処理を行い
1
+ フォームの送信応じページ表示の実現方法
body CHANGED
@@ -1,63 +1,59 @@
1
- 同じページに設置された各フォーム送信するときにそぞれ異なるページを表示します。そのめ、doPost()内で各フォームの処理を分離したったのですが、質問は、フォーム別するために使用される値を取得する方法がわからないということでした 次の3つの方法を試しましたが、この試みは残念がら失敗しました。
2
-
3
- - (1)button要素(type属性button)のidをクリックイベントから受け取ります。→何も起こりません
4
- ```html
5
- <button type='button' id='form1' class='button'>button</button>
6
- <button type='button' id='form2' class='button'>button</button>
7
- ```
8
- ```js
9
- const button = document.querySelectorAll('.button');
10
- for(let i=0;i<button.length;i=i+1){button[i].addEventListener('click',function(){buttonF(this.id)});}
11
- function buttonF(x){google.script.run.buttonClick(x);}
12
- ```
13
- ```gs
14
- function buttonClick(x){
15
- let template;
16
- switch (x){
17
- case 'form1': template = HtmlService.createTemplateFromFile('form1');
18
- break;
19
- case 'form2': template = HtmlService.createTemplateFromFile('form2');
20
- break;
21
- }
22
- return template.evaluate();
23
- }
24
- ```
25
-
26
- - (2)button要素(type属性submit)のidをクリックイベントから受け取ります。→「スクリプトが完了しましたが、何も返されませんでした」
27
- - (3)input要素(type属性hidden)の値をdoPost()から受け取ります。→ウェブブラウザが埋め込みページの表示をブロックします。新しいウィンドウで開いても元のページが表示されるだけです。
28
- ```html
29
- <form action='...' method='post'>
30
- <input type='hidden' name='form' value='form1'>
31
- <button type="submit" class='submit'>submit</button>
32
- </form>
33
- <form action='...' method='post'>
34
- <input type='hidden' name='form' value='form2'>
35
- <button type='submit' class='submit'>submit</button>
36
- </form>
37
- ```
38
- ```js
39
- const submit = document.querySelectorAll('.submit');
40
- for(let i=0;i<submit.length;i=i+1){submit[i].addEventListener('click', function(){submitF(this.id)});}
41
- function submitF(x){google.script.run.submitClick(x);}
42
- ```
43
- ```gs
44
-
45
- function submitClick(x){
46
- let template;
47
- switch (x){
48
- case 'form1': template = HtmlService.createTemplateFromFile('form1'); break;
49
- case 'form2': template = HtmlService.createTemplateFromFile('form2'); break;
50
- }
51
- return template.evaluate();
52
- }//(2)
53
-
54
- function doPost(e){
55
- const form= e.parameter.form;
56
- let template;
57
- switch (form){
58
- case 'form1': template = HtmlService.createTemplateFromFile('form1'); break;
59
- case 'form2': template = HtmlService.createTemplateFromFile('form2'); break;
60
- }
61
- return template.evaluate();
62
- }//(3)
1
+ どのフォーム送信れたかを別する方法が不明。3つのるアプローチは期待通りに動作しませんでした。
2
+ 1. button要素(type属性button)のidをクリックイベントから受け取ります: 何も起こりません。
3
+ 2. button要素(type属性submit)のidをクリックイベントから受け取ります : 「スクリプトが完了しましたが、何も返されませんでした」
4
+ 3. input要素(type属性hidden)の値をdoPost()から受け取ります: ウェブブラウザが埋め込みページの表示をブロックします。新しいウィンドウで開いても元のページが表示されるだけです。
5
+ ```js
6
+ const buttons = document.querySelectorAll('.button');
7
+ //querySelectorAll('.submit')
8
+ for (let i = 0; i < buttons.length; i++) {
9
+ buttons[i].addEventListener('click', function() {
10
+ handleButtonClick(this.id);
11
+ });
12
+ }
13
+
14
+ function handleButtonClick(buttonId) {
15
+ google.script.run.buttonClick(buttonId);
16
+ }
17
+ ```
18
+ ```gs
19
+ function buttonClick(buttonId) {
20
+ let template;
21
+ switch (buttonId) {
22
+ case 'form1':
23
+ template = HtmlService.createTemplateFromFile('PageForm1');
24
+ break;
25
+ case 'form2':
26
+ template = HtmlService.createTemplateFromFile('PageForm2');
27
+ break;
28
+ }
29
+ return template.evaluate();
30
+ }
31
+
32
+ function doPost(e) {
33
+ const form = e.parameter.form;
34
+ let template;
35
+ switch (form) {
36
+ case 'form1':
37
+ template = HtmlService.createTemplateFromFile('form1');
38
+ break;
39
+ case 'form2':
40
+ template = HtmlService.createTemplateFromFile('form2');
41
+ break;
42
+ }
43
+ return template.evaluate();
44
+ }
45
+ ```
46
+ ```html
47
+ <button type = 'button' id = 'form1' class = 'button'>button</button>
48
+ <button type = 'button' id = 'form2' class = 'button'>button</button>
49
+
50
+ <form action = '...' method = 'post'>
51
+ <input type = 'hidden' name = 'form' value = 'form1'>
52
+ <button type = "submit" class = 'submit'>submit</button>
53
+ </form>
54
+
55
+ <form action = '...' method = 'post'>
56
+ <input type = 'hidden' name = 'form' value = 'form2'>
57
+ <button type = 'submit' class = 'submit'>submit</button>
58
+ </form>
63
59
  ```

9

全体の修正: コード: (2),(3)

2021/08/12 07:16

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -21,4 +21,43 @@
21
21
  }
22
22
  return template.evaluate();
23
23
  }
24
+ ```
25
+
26
+ - (2)button要素(type属性submit)のidをクリックイベントから受け取ります。→「スクリプトが完了しましたが、何も返されませんでした」
27
+ - (3)input要素(type属性hidden)の値をdoPost()から受け取ります。→ウェブブラウザが埋め込みページの表示をブロックします。新しいウィンドウで開いても元のページが表示されるだけです。
28
+ ```html
29
+ <form action='...' method='post'>
30
+ <input type='hidden' name='form' value='form1'>
31
+ <button type="submit" class='submit'>submit</button>
32
+ </form>
33
+ <form action='...' method='post'>
34
+ <input type='hidden' name='form' value='form2'>
35
+ <button type='submit' class='submit'>submit</button>
36
+ </form>
37
+ ```
38
+ ```js
39
+ const submit = document.querySelectorAll('.submit');
40
+ for(let i=0;i<submit.length;i=i+1){submit[i].addEventListener('click', function(){submitF(this.id)});}
41
+ function submitF(x){google.script.run.submitClick(x);}
42
+ ```
43
+ ```gs
44
+
45
+ function submitClick(x){
46
+ let template;
47
+ switch (x){
48
+ case 'form1': template = HtmlService.createTemplateFromFile('form1'); break;
49
+ case 'form2': template = HtmlService.createTemplateFromFile('form2'); break;
50
+ }
51
+ return template.evaluate();
52
+ }//(2)
53
+
54
+ function doPost(e){
55
+ const form= e.parameter.form;
56
+ let template;
57
+ switch (form){
58
+ case 'form1': template = HtmlService.createTemplateFromFile('form1'); break;
59
+ case 'form2': template = HtmlService.createTemplateFromFile('form2'); break;
60
+ }
61
+ return template.evaluate();
62
+ }//(3)
24
63
  ```

8

全体の修正: コード: (1)

2021/08/12 07:16

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -1,1 +1,24 @@
1
- 同じページに設置された各フォームを送信するときにそれぞれ異なるページを表示します。そのため、doPost()内で各フォームの処理を分離したかったのですが、質問は、フォームを区別するために使用される値を取得する方法がわからないということでした。 次の3つの方法を試しましたが、この試みは残念ながら失敗しました。
1
+ 同じページに設置された各フォームを送信するときにそれぞれ異なるページを表示します。そのため、doPost()内で各フォームの処理を分離したかったのですが、質問は、フォームを区別するために使用される値を取得する方法がわからないということでした。 次の3つの方法を試しましたが、この試みは残念ながら失敗しました。
2
+
3
+ - (1)button要素(type属性button)のidをクリックイベントから受け取ります。→何も起こりません。
4
+ ```html
5
+ <button type='button' id='form1' class='button'>button</button>
6
+ <button type='button' id='form2' class='button'>button</button>
7
+ ```
8
+ ```js
9
+ const button = document.querySelectorAll('.button');
10
+ for(let i=0;i<button.length;i=i+1){button[i].addEventListener('click',function(){buttonF(this.id)});}
11
+ function buttonF(x){google.script.run.buttonClick(x);}
12
+ ```
13
+ ```gs
14
+ function buttonClick(x){
15
+ let template;
16
+ switch (x){
17
+ case 'form1': template = HtmlService.createTemplateFromFile('form1');
18
+ break;
19
+ case 'form2': template = HtmlService.createTemplateFromFile('form2');
20
+ break;
21
+ }
22
+ return template.evaluate();
23
+ }
24
+ ```

7

全体の修正: 説明

2021/08/12 06:41

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -1,87 +1,1 @@
1
- ## Code
2
- ```html
3
- <form action="URL" method="post" name ="form_1" id = "form_1"><input type="submit"></form>
4
- <form action="URL" method="post" name ="form_2" id = "form_2"><input type="submit"></form>
5
- ```
6
- ```script
7
- function doGet(){return HtmlService.createTemplateFromFile("index").evaluate();}
8
- ```
9
- ## Error
10
- ### name
11
- ReferenceError: name is not defined
12
- ```script
13
- function doPost() {
14
- if(name === form_1){return HtmlService.createTemplateFromFile("form_1").evaluate();}
15
- else{return HtmlService.createTemplateFromFile("form_2").evaluate();}
16
- }
17
- ```
18
- ### id
19
- ReferenceError: id is not defined
20
- ```script
21
- function doPost() {
22
- if(id === form_2){return HtmlService.createTemplateFromFile("form_1").evaluate();}
23
- else{return HtmlService.createTemplateFromFile("form_2").evaluate();}
24
- }
25
- ```
26
- ### onclick
27
- スクリプトが完了しましたが、何も返されませんでした。
28
- ```html
29
- <input type="submit" onclick = <?!= form_1(); ?>>
30
- <input type="submit" onclick = <?!= form_2(); ?>>
31
- ```
32
- ```script
33
- function form_1(){return HtmlService.createTemplateFromFile("form_1").evaluate();}
34
- function form_2(){return HtmlService.createTemplateFromFile("form_2").evaluate();}
35
- ```
36
- ### .id & id
37
- ReferenceError: id_name is not defined
38
- ```html
39
- <input type="submit" onclick= <? forms(this); ?>>
40
- <input type="submit" onclick= <? forms(this); ?>>
41
- ```
42
- ```script
43
- function forms(x){const id_name = x.id; return id_name}
44
- function doPost(){
45
- if(id_name === form_1){HtmlService.createTemplateFromFile("form_1").evaluate();}
46
- else{HtmlService.createTemplateFromFile("form_2").evaluate();}
47
- }
48
- ```
49
- ##編集
50
- ###No.1: html構造の再検討
51
- 既知の要素取得方法に基づいて、さまざまな要素取得方法を検証するために使いやすい構成を再検討しました。
52
- ```html
53
- <body>
54
- <div>
55
- <p>Paragraph</p>
56
- <form action="URL" method="post"><input type="text"><input type="submit"></form>
1
+ 同じページに設置された各フォームを送信するときにそれぞれ異なるページを表示します。そのため、doPost()内で各フォームの処理を分離したかったのですが、質問は、フォームを区別するために使用される値を取得する方法がわからないということでした。 次の3つの方法を試しましたが、この試みは残念ながら失敗しました。
57
- <form action="URL" method="post"><input type="text"><input type="submit"></form>
58
- </div>
59
- </body>
60
- ```
61
- Div
62
- ├Paragraph
63
- ├Form
64
- │├Input(text)
65
- │└Input(button)
66
- └Form
67
- □├Input(text) 
68
- □└Input(button)
69
- ###No.2: 期待した動作を行うかどうかテストが行われました。
70
- - Element.children
71
- - document.getElementsByClassName()
72
- ###No.3: これらの関数は、前提として利用されることがあります。
73
- ```script
74
- function getRf(shname, row, column){
75
- const Gs = SpreadsheetApp.getActiveSpreadsheet();
76
- const Gss = Gs.getSheetByName(sheetname)
77
- const reRan = Gss.getRange(row,column);
78
- return reRan;
79
- }//紐づいたシートが使用されます。
80
- function setVf(shname,row,column,test){
81
- getRf(shname,row,column).setValue(test);
82
- }
83
- function getVf(shname,row,column){
84
- const reVal = getRf(shname,row,column).getValue();
85
- return reVal
86
- }
87
- ```

6

編集> No.3: これらの関数は、前提として利用されることがあります。

2021/08/12 06:28

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -68,4 +68,20 @@
68
68
  □└Input(button)
69
69
  ###No.2: 期待した動作を行うかどうかテストが行われました。
70
70
  - Element.children
71
- - document.getElementsByClassName()
71
+ - document.getElementsByClassName()
72
+ ###No.3: これらの関数は、前提として利用されることがあります。
73
+ ```script
74
+ function getRf(shname, row, column){
75
+ const Gs = SpreadsheetApp.getActiveSpreadsheet();
76
+ const Gss = Gs.getSheetByName(sheetname)
77
+ const reRan = Gss.getRange(row,column);
78
+ return reRan;
79
+ }//紐づいたシートが使用されます。
80
+ function setVf(shname,row,column,test){
81
+ getRf(shname,row,column).setValue(test);
82
+ }
83
+ function getVf(shname,row,column){
84
+ const reVal = getRf(shname,row,column).getValue();
85
+ return reVal
86
+ }
87
+ ```

5

編集> No.2: 期待した動作を行うかどうかテストが行われました。

2021/04/22 04:06

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -65,4 +65,7 @@
65
65
  │└Input(button)
66
66
  └Form
67
67
  □├Input(text) 
68
- □└Input(button)
68
+ □└Input(button)
69
+ ###No.2: 期待した動作を行うかどうかテストが行われました。
70
+ - Element.children
71
+ - document.getElementsByClassName()

4

編集>No.1: html構造の再検討

2021/04/22 04:00

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -45,4 +45,24 @@
45
45
  if(id_name === form_1){HtmlService.createTemplateFromFile("form_1").evaluate();}
46
46
  else{HtmlService.createTemplateFromFile("form_2").evaluate();}
47
47
  }
48
- ```
48
+ ```
49
+ ##編集
50
+ ###No.1: html構造の再検討
51
+ 既知の要素取得方法に基づいて、さまざまな要素取得方法を検証するために使いやすい構成を再検討しました。
52
+ ```html
53
+ <body>
54
+ <div>
55
+ <p>Paragraph</p>
56
+ <form action="URL" method="post"><input type="text"><input type="submit"></form>
57
+ <form action="URL" method="post"><input type="text"><input type="submit"></form>
58
+ </div>
59
+ </body>
60
+ ```
61
+ Div
62
+ ├Paragraph
63
+ ├Form
64
+ │├Input(text)
65
+ │└Input(button)
66
+ └Form
67
+ □├Input(text) 
68
+ □└Input(button)

3

```

2021/04/22 03:33

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -1,15 +1,15 @@
1
1
  ## Code
2
- ```index.html
2
+ ```html
3
3
  <form action="URL" method="post" name ="form_1" id = "form_1"><input type="submit"></form>
4
4
  <form action="URL" method="post" name ="form_2" id = "form_2"><input type="submit"></form>
5
5
  ```
6
- ```index.gs
6
+ ```script
7
7
  function doGet(){return HtmlService.createTemplateFromFile("index").evaluate();}
8
8
  ```
9
9
  ## Error
10
10
  ### name
11
11
  ReferenceError: name is not defined
12
- ```index.gs
12
+ ```script
13
13
  function doPost() {
14
14
  if(name === form_1){return HtmlService.createTemplateFromFile("form_1").evaluate();}
15
15
  else{return HtmlService.createTemplateFromFile("form_2").evaluate();}
@@ -17,7 +17,7 @@
17
17
  ```
18
18
  ### id
19
19
  ReferenceError: id is not defined
20
- ```index.gs
20
+ ```script
21
21
  function doPost() {
22
22
  if(id === form_2){return HtmlService.createTemplateFromFile("form_1").evaluate();}
23
23
  else{return HtmlService.createTemplateFromFile("form_2").evaluate();}
@@ -25,21 +25,21 @@
25
25
  ```
26
26
  ### onclick
27
27
  スクリプトが完了しましたが、何も返されませんでした。
28
- ```index.html
28
+ ```html
29
29
  <input type="submit" onclick = <?!= form_1(); ?>>
30
30
  <input type="submit" onclick = <?!= form_2(); ?>>
31
31
  ```
32
- ```index.gs
32
+ ```script
33
33
  function form_1(){return HtmlService.createTemplateFromFile("form_1").evaluate();}
34
34
  function form_2(){return HtmlService.createTemplateFromFile("form_2").evaluate();}
35
35
  ```
36
36
  ### .id & id
37
37
  ReferenceError: id_name is not defined
38
- ```index.html
38
+ ```html
39
39
  <input type="submit" onclick= <? forms(this); ?>>
40
40
  <input type="submit" onclick= <? forms(this); ?>>
41
41
  ```
42
- ```index.gs
42
+ ```script
43
43
  function forms(x){const id_name = x.id; return id_name}
44
44
  function doPost(){
45
45
  if(id_name === form_1){HtmlService.createTemplateFromFile("form_1").evaluate();}

2

return id_name

2021/04/03 12:06

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -40,7 +40,7 @@
40
40
  <input type="submit" onclick= <? forms(this); ?>>
41
41
  ```
42
42
  ```index.gs
43
- function forms(x){const id_name = x.id; return id_name;}
43
+ function forms(x){const id_name = x.id; return id_name}
44
44
  function doPost(){
45
45
  if(id_name === form_1){HtmlService.createTemplateFromFile("form_1").evaluate();}
46
46
  else{HtmlService.createTemplateFromFile("form_2").evaluate();}

1

return id_name;

2021/04/03 09:19

投稿

3_April_2021
3_April_2021

スコア48

title CHANGED
File without changes
body CHANGED
@@ -40,7 +40,7 @@
40
40
  <input type="submit" onclick= <? forms(this); ?>>
41
41
  ```
42
42
  ```index.gs
43
- function forms(x){const id_name = x.id; return id_name}
43
+ function forms(x){const id_name = x.id; return id_name;}
44
44
  function doPost(){
45
45
  if(id_name === form_1){HtmlService.createTemplateFromFile("form_1").evaluate();}
46
46
  else{HtmlService.createTemplateFromFile("form_2").evaluate();}