デモ
星座名を選択したときに、その英語名をアラートに出してみる
仕組み
このようなオブジェクトを用意しておいて
var objs = [ { 'id': 'Aries', 'value': 'おひつじ座' }, { 'id': 'Taurus', 'value': 'おうし座' }, { 'id': 'Gemini', 'value': 'ふたご座' }, { 'id': 'Cancer', 'value': 'かに座' }, { 'id': 'Leo', 'value': 'しし座' }, { 'id': 'Virgo', 'value': 'おとめ座' }, { 'id': 'Libra', 'value': 'てんびん座' }, { 'id': 'Scorpius', 'value': 'さそり座' }, { 'id': 'Sagittarius', 'value': 'いて座' }, { 'id': 'Capriconus', 'value': 'やぎ座' }, { 'id': 'Aquarius', 'value': 'みずがめ座' }, { 'id': 'Pisces', 'value': 'うお座' } ]
テキストボックスで選択した値に一致するvalueのidを返す
コード.gs
function doGet() { return HtmlService.createHtmlOutputFromFile("index"); } |
意訳この機能がやること 指定したHTMLファイルを表示する |
index.html
<!DOCTYPE html> <html> <body> <div id='main_div'> <input list='data_list' id='data_list_input'> </div> </body> <script> getData(); /************************************ elem(id) ************************************/ function elem(id) { return document.getElementById(id); } /************************************ objs ************************************/ function returnObj() { var objs = [ { 'id': 'Aries', 'value': 'おひつじ座' }, { 'id': 'Taurus', 'value': 'おうし座' }, { 'id': 'Gemini', 'value': 'ふたご座' }, { 'id': 'Cancer', 'value': 'かに座' }, { 'id': 'Leo', 'value': 'しし座' }, { 'id': 'Virgo', 'value': 'おとめ座' }, { 'id': 'Libra', 'value': 'てんびん座' }, { 'id': 'Scorpius', 'value': 'さそり座' }, { 'id': 'Sagittarius', 'value': 'いて座' }, { 'id': 'Capriconus', 'value': 'やぎ座' }, { 'id': 'Aquarius', 'value': 'みずがめ座' }, { 'id': 'Pisces', 'value': 'うお座' } ] return objs; } elem('data_list_input').onchange = dataChanged; /************************************ getData ************************************/ function getData() { var main = document.getElementById('main_div'); var datalist = document.createElement('datalist'); datalist.setAttribute('id', 'data_list'); var objs = returnObj(); for (var i = 0; i < objs.length; i++) { var id = objs[i]['id']; var value = objs[i]['value']; var option = document.createElement('option'); option.setAttribute('id', id); option.setAttribute('value', value); datalist.appendChild(option); } main.appendChild(datalist); } /************************************ dataChanged ************************************/ var targetName; function dataChanged() { var datalist = elem('data_list'); var dataValue = elem('data_list_input').value; var id = elem('data_list_input').list.options[0].id; var objs = returnObj(); targetName = dataValue; var filtered = objs.filter(judge); var dataId = getResult(filtered); alert(dataId); } function judge(items) { var regexp = new RegExp(targetName); var judged = regexp.test(items['value']); return judged; } function getResult(filtered) { var result = []; for (var i = 0; i < filtered.length; i++) { result.push(filtered[i]['id']); } return result; } </script> </html> |
補足
selectとoptionの場合は
選択したときにonclickでthis.idなどの値を返せますが、
datatistとoptionの場合は
onclickが使えなかったため、
テキストボックスの値を元にオブジェクトからデータを引っ張ってくる
という方法で実現しました。
selectとoptionの場合は
選択したときにonclickでthis.idなどの値を返せますが、
datatistとoptionの場合は
onclickが使えなかったため、
テキストボックスの値を元にオブジェクトからデータを引っ張ってくる
という方法で実現しました。