質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

933閲覧

ボタンAが押されたら, ボタンBにイベントハンドラを登録したい

slimat

総合スコア57

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/12/14 17:07

編集2019/12/14 17:23

こんにちは

GASでクイズアプリを作成しています.
回答ボタン(id属性値がButton1~4)が押された時に, "次に進む"ボタン(id属性値がnext)にイベントハンドラを追加することによって, "次に進む"(id属性値がnextのボタン)が押された時にnextQuestion関数が呼び出されるようにしたいです.
現状では, scriptタグ内のcheckTheAnswer関数内にある, addEventListenerメソッドによるイベントハンドラの登録をしているのですが問題文及び選択肢が更新されません. しかし, 1行上の"次に進む"ボタンの背景色の変更は動作しています.

gs

1var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // "シート1"を取得 2 3function doGet() { 4 Logger.log('doGet関数呼び出し完了'); 5 try { 6 var template = HtmlService.createTemplateFromFile("hello").evaluate(); // テンプレートオブジェクトの取得 7 } catch(e) { 8 Logger.log(e.message); 9 } 10 return template; 11} 12 13function QAInfo(count) { // evaluate後に呼び出されるので, doGet関数の定義の後でOK 14 Logger.log('QAInfo関数呼び出し完了'); 15 var data = sheet.getRange(count+1, 1, 1, 6).getValues(); // セルの値を取得し, テンプレートに付与 16 Logger.log('gsファイルでの' + count + '番目の問題文 = ' + data[0][0]); 17 18 return data; 19} 20 21function answerButtonClick(click_value, numQ) { 22 Logger.log('answerButtonClickの呼び出し完了, click_value = ' + click_value); 23 Logger.log("F2であればOK : F" + (numQ + 1)); 24 if(sheet.getRange("F" + (numQ + 1)).getValues() == click_value){ 25 Logger.log('正解'); 26 return 1; 27 } else { 28 Logger.log('不正解'); 29 return 0; 30 } 31} // function

html

1<!DOCTYPE html> 2<html> 3<head> 4 <base target="_top"> 5 <script src="https://code.jquery.com/jquery-3.1.1.js"></script> 6</head> 7<body> 8 <p id="qNum">おはよう</p> 9 <p id='qSentence'>こんにちは</p> <!-- 問題文を取得 --> 10 <ol> 11 <li id='q1'></li> <!-- 選択肢1を表示 --> 12 <li id='q2'></li> 13 <li id='q3'></li> 14 <li id='q4'></li> 15 </ol> 16 17 <input type="button" id="Button1" value="1" onclick="checkTheAnswer(this.value)"> 18 <input type="button" id="Button2" value="2" onclick="checkTheAnswer(this.value)"> 19 <input type="button" id="Button3" value="3" onclick="checkTheAnswer(this.value)"> 20 <input type="button" id="Button4" value="4" onclick="checkTheAnswer(this.value)"> 21 22 <p id='CorrectOrMiss'></p> 23 <input type="button" id="next" value="次に進む"> 24 25 <script> 26 try { 27 var countObj = { 28 count: 0, 29 qNumBefore: 0, 30 countPlus: function() {++this.count} 31 }; 32 33 function checkTheAnswer(clickedNum){ // 回答ボタンがクリックされたときに, 正解・不正解を表示 34 google.script.run.withSuccessHandler(dispCorrectOrMiss).withFailureHandler(failedAccess).withUserObject(countObj.count, 'answerButtonClick').answerButtonClick(clickedNum, countObj.count) 35 if (countObj.qNumBefore !== countObj.count){ 36 countObj.qNumBefore = countObj.count; 37 try { 38 document.getElementById("next").style.background = '#0000ff'; 39 document.getElementById("next").addEventListener("onclick", nextQuestion, {once:true}); 40 } catch(e){ 41 document.getElementById("Button4").insertAdjacentHTML("afterend","<p>error → hello.html → イベントハンドラの追加時 → " + e.message + "</p>"); 42 } 43 document.getElementById("Button4").insertAdjacentHTML("afterend","<p>functionality added to 次へ進む</p>"); 44 } 45 } 46 47 function nextQuestion() { 48 countObj.countPlus(); 49 try { 50 google.script.run.withSuccessHandler(setQuestion).withFailureHandler(failedAccess).withUserObject(countObj.count, 'QAInfo').QAInfo(countObj.count); 51 } catch (e) { 52 document.getElementById("Button4").insertAdjacentHTML('afterend','<p>error → hello.html → 問題文など取得時 → ' + e.message + '</p>'); 53 } 54 } 55 56 function setQuestion(data, d){ 57 $("#qNum").html('問題' + d); 58 $("#qSentence").html(data[0][0]); 59 for (var j=1; j<=4; ++j){ 60 $("#q" + j).html(data[0][j]); 61 } 62 } 63 64 function dispCorrectOrMiss(CorrectOrMiss){ 65 if (CorrectOrMiss == 1){ 66 $("#CorrectOrMiss").html('正解'); 67 } else { 68 $("#CorrectOrMiss").html('不正解'); 69 } 70 } 71 72 function failedAccess(numQ, functionName){ 73 document.getElementById("Button4").insertAdjacentHTML('afterend','<p>missed to call' + functionName + numQ + '</p>'); 74 } 75 76 nextQuestion(); 77 78 } catch(e) { 79 document.getElementById("Button4").insertAdjacentHTML('afterend','<p>error → hello.html → ' + e.message + '</p>'); 80 } 81 </script> 82</body> 83</html> 84

宜しくお願い致します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

addEventListenerの第一引数に"on"は不必要でした.

投稿2019/12/15 14:36

slimat

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問