複数のフォームがあり、それぞれの送信後に異なるページを表示したい。
どのフォームが送信されたかを識別する方法が不明。3つの異なるアプローチは期待通りに動作しませんでした。
- button要素(type属性button)のidをクリックイベントから受け取ります: 何も起こりません。
- button要素(type属性submit)のidをクリックイベントから受け取ります : 「スクリプトが完了しましたが、何も返されませんでした」
- input要素(type属性hidden)の値をdoPost()から受け取ります: ウェブブラウザが埋め込みページの表示をブロックします。新しいウィンドウで開いても元のページが表示されるだけです。
js
1const buttons = document.querySelectorAll('.button'); 2//querySelectorAll('.submit') 3for (let i = 0; i < buttons.length; i++) { 4 buttons[i].addEventListener('click', function() { 5 handleButtonClick(this.id); 6 }); 7} 8 9function handleButtonClick(buttonId) { 10 google.script.run.buttonClick(buttonId); 11}
gs
1function buttonClick(buttonId) { 2 let template; 3 switch (buttonId) { 4 case 'form1': 5 template = HtmlService.createTemplateFromFile('PageForm1'); 6 break; 7 case 'form2': 8 template = HtmlService.createTemplateFromFile('PageForm2'); 9 break; 10 } 11 return template.evaluate(); 12} 13 14function doPost(e) { 15 const form = e.parameter.form; 16 let template; 17 switch (form) { 18 case 'form1': 19 template = HtmlService.createTemplateFromFile('form1'); 20 break; 21 case 'form2': 22 template = HtmlService.createTemplateFromFile('form2'); 23 break; 24 } 25 return template.evaluate(); 26}
html
1<button type = 'button' id = 'form1' class = 'button'>button</button> 2<button type = 'button' id = 'form2' class = 'button'>button</button> 3 4<form action = '...' method = 'post'> 5 <input type = 'hidden' name = 'form' value = 'form1'> 6 <button type = "submit" class = 'submit'>submit</button> 7</form> 8 9<form action = '...' method = 'post'> 10 <input type = 'hidden' name = 'form' value = 'form2'> 11 <button type = 'submit' class = 'submit'>submit</button> 12</form>
回答1件
あなたの回答
tips
プレビュー