问题描述
我编写了一个应用程序,旨在生成一个调查,该调查在调查的每次迭代中都会发生变化。我有一些随每次迭代而变化的全局变量,我想将它们包含在调查结果中。我无法在 JSON 中更新变量。我尝试将整个系统包装在 start 函数中,但这似乎破坏了整个调查。我不确定在这里做什么 - 我知道这与我的变量和函数如何相互嵌套有关,但我似乎无法弄清楚理想的安排。我希望能够在最终 JSON 中包含更改的变量,以便我可以存储它并在我的 SurveyJS 服务存储中查看它。有什么建议吗?
整个应用程序的小提琴 - https://jsfiddle.net/cormundo/n9hjrpzx/1/
最相关的代码:
function start() {
username = document.getElementById("user_PID").value;
alert("your PID is " + username);
while (count > 20);
modal.style.display = "none";
document.getElementById("surveyElement").style="display:inline-block;width:100%;";
document.getElementById("streetscape").style="display:visible";
document.getElementById("btn1").style="display:none";
};
脚本的其余部分运行调查,最重要的方面是嵌套在 JSON 中的变量 -
var json;
function jsoner (){
knxer(); <- increments global count
keynamer(); <- attatches keyname to survey image from external site
mapilinker(); <- More external site business
imgur(); <- See above(To be combined with other functions here)
usernamer(); <- Theoretically attaches global username,not working
console.log (username)
json = {
pages: [
{
name: "page1",elements: [
{
type: "text",name: "UID",visible: false,title: "USERID",defaultValue: (PID2)
},{
type: "text",name: "Keyn",title: "Key",defaultValue: (keyN2)
},name: "CNT",title: "TIME",defaultValue: (count)
}...
最后,重要的是要注意,每次提交调查时,页面都应该更新为具有不同 (PID2) (keyN2) 和 (count) 变量的新版本调查,以及新图像供用户回答有关问题。涵盖所有内容的底部部分 -
function update(){
knxer();
keynamer();
mapilinker();
imgur();
usernamer();
jsoner();
}
jsoner();
window.survey = new Survey.Model(json);
survey
.onComplete
.add(function (result) {
var PID = username
var results = PID + ":\n" + JSON.stringify(result.data,null,3);
document
.querySelector('#surveyResult')
.textContent = results;
window.count ++;
update();
console.log(knx);
console.log(count);
console.log(keyname);
console.log(mapilink);
console.log(username);
survey.clear();
survey.render();
});
$("#surveyElement").Survey({model: survey});
为这次混乱道歉。谢谢!
解决方法
问题在于您在收集用户名之前声明了您的调查。因此,您的调查使用包含 UID 问题默认值的 null 的 JSON 数据进行实例化。 您可以通过做两件事来修复它:
- 将以下代码部分移到
jsoner()
函数中:
window.survey = new Survey.Model(json);
survey
.onComplete
.add(function(result) {
var PID = username
var results = PID + ":\n" + JSON.stringify(result.data,null,3);
document
.querySelector('#surveyResult')
.textContent = results;
window.count++;
update();
console.log(knx);
console.log(count);
console.log(keyname);
console.log(mapilink);
console.log(username);
survey.clear();
survey.render();
});
$("#surveyElement").Survey({
model: survey
});
- 将调用移至
jsoner()
函数内的start()
函数
我分叉了你的小提琴并让它在这里工作:https://jsfiddle.net/7u8jnpry/