インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

HTA innertHTMLまわりでうまくいかない

あいかわらずアンケートのほうで遊んでいます。

いったんは作れたんですが,JavaScriptの情報をあさってると,便利そうなところにどんどん出会うので,それに従って書き直しているところ。

とりあえずhtmlを作る部分 ブラウザでは動くHTMLをのせます。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無題ドキュメント</title>
<style type="text/css">
    table{border-collapse: collapse;}
    table,tr,td{border: solid 2px black;}
    td.clsmondai{padding-left: 5px;font-weight: bold;background-color: black;color: white;width:400px}
    td.clskaito{padding-left: 20px;background-color: antiquewhite}
  </style>
<script>
  function init(){
    makeElement(1,"たべものをえらべ","food","select",Array.from(new Array(41)).map((v,i)=> i + 1))
    makeElement(2,"ペットをえらべ","pet","radio",["犬","猫","バナナ"])
    makeElement(3,"ペットをえらべ","pet2","check",["犬","猫","バナナ"])
    makeElement(4,"てすとですよ","textar","text")
    makeElement(5,"てすとですとも","text","multi")
  }
  
  function makeElement(No,mondai,name,type,arr){
    var html=[];
    var tmp;
    switch(type){
      case "select":tmp = makeSelectElement(name,"select",arr);break
      case "radio":tmp = makeSelectElement(name,"radio",arr);break
      case "check":tmp = makeSelectElement(name,"checkbox",arr);break
      case "text":tmp="<input type='text' name='" + name + "' size='45' />";break
      case "multi":tmp="<textarea name='" + name +"' rows='5' cols='46' ></textarea>";break
    }
    
    html.push(document.getElementById("table0").innerHTML)
    html.push("<tr><td class='clsmondai'>" + mondai + "</td></tr>")
    html.push("<tr><td class='clskaito' id='" + name + "'></td>")
    document.getElementById("table0").innerHTML=html.join("")
    if (type=="select") {
      document.getElementById(name).appendChild(tmp)
    } else {
      document.getElementById(name).innerHTML=tmp
    }
  }

  function makeSelectElement(name,type,arr){
    switch(type){
      case "select":
        var element = document.createElement("select")
        for(var i=0;i<arr.length;i++){
          var option=document.createElement("option")
          option.value=arr[i]
          option.innerText=arr[i]
          element.appendChild(option)
        }
        break
      case "radio":
      case "checkbox": //間違いじゃないよ
        var tmp=[]
        for(var i=0;i<arr.length;i++){
          tmp.push("<input type='"+ type +"' name='" + name + "' value='" + arr[i] +"'>"+arr[i]+"<br>")
        }
        element=tmp.join("")
        break

    }
    return element
  }
</script>
</head>
<body onload="init()">
  <form id="formFld">
    <table id="table0">
    </table>
    <input type="button" href="#" value="送信する" onClick="PostData()"/>
  </form>
</body>
</html>

画面はこんな感じになる
f:id:chemiphys:20190112115219p:plain
アンケート部分を作るところをかなりシンプルにできたつもりです。やってておもしろかった。

ただ,これをHTAにすると,innerHTMLを扱う周辺でエラーが出てうまく動かない。

未知の実行時エラーとでる。ほんと意味がワカラナイ  未知って

でもがんばる

いろいろ試しているうちに,うまくいった段階を破壊することがあるので,とりあえず記録を残しにきました(;´∀`)