Chapter 11 Form
- Part I
- Part II
- Part III
11.1 Setup
11.1.1 創立Rhtml
在文件開始(在所有r code出現前)貼上
<!--begin.rcode include=FALSE
knitr::opts_chunk$set(echo = FALSE)
end.rcode-->
用來避免html生成後R程式碼還留著。
11.1.2 設定一個有bootstrap4的Rhtml
建立基本BS layout
3 columns
left one as a control panel with form(s).
middle one. put a div element with id=“myResult” to hold our experiment results.
11.1.3 增加after-body JS placeholder
- 在body最底(即
</body>
)的上一行增加一個r code chunk, 內容為:
11.1.4 創立一個名為form.js的檔案
可由File > New File > Text file創立並在跳出視窗右下選javascript. 內容可以先放
在body最底用來確保之後用到jQuery時,jQuery已load進來。
11.1.6 使用AJAX XMLHttpRequest
//放到global
var requestURL = 'data/SearchShowAction.json'
var myData
//設定準備使用的GET instance
const requestMyJson = new XMLHttpRequest();
requestMyJson.open('GET', requestURL);
requestMyJson.responseType = 'json';
//Asynchronous communication
requestMyJson.onload = function() {
myData = requestMyJson.response;
}
//送出請求
requestMyJson.send();
11.2 Form的基本元素
The for attribute of the <label> tag should be equal to the id attribute of the <input> element to bind them together.
11.3 Form object
11.4 Form events
Form element選出後其值不會再改,所以要以onchange, 或jquery change event加在form object上去啟動選值的動作,不要一開始就把這些element選出來。
11.5 Form and JSON interaction
選單的值決定myData裡那一個表演的showInfo要show在畫面
可以先在R裡探索一下資料,有需要用javascript測試時可以用V8套件。
myData <- jsonlite::fromJSON("https://cloud.culture.tw/frontsite/trans/SearchShowAction.do?method=doFindTypeJ&category=6", simplifyDataFrame = F)
library(V8)
myJs <- v8()
myJs$assign("myData", myData) #把R的myData過渡到Js的myData
myJs$eval("myData[0]['showInfo']") # 測試Js
myJs$eval("myData[0]['showInfo'][0]['locationName']")
- 針對showInfo設置radiobuttons用來選那一場要顯示詳細內容。