用一个页面创建测试,以确定结果(不能访问数据库或php,需要使用javascript/html/等)

Creating quiz with one page that determines outcome (no access to database or php, needs to be in javascript/html/etc.)

本文关键字:php 数据库 html javascript 访问 一个 创建 结果 测试 不能      更新时间:2023-09-26

注意-我无法访问数据库,也无法使用PHP,这就是我寻求帮助的原因。我的双手被绑住了,只能通过html/javascript/等进行操作

我正在创建一个在线测验,有10个问题(每页1个问题),但只有一个问题决定了4个不同最终地点的结果。问题3(第3页)是决定性的问题,但我需要"记录"单选按钮的选择,所以最后一个问题(第10页)决定了提交按钮的URL,该按钮将重定向用户。

所有其他问题都是虚荣心问题,因为问题3是很大的决定因素。

我在想,问题3(第3页)的答案创建了一个具有4个值中的1个值的cookie(基于单选按钮的选择),然后在最后一个问题(第10页)上读取cookie,该值确定url,然后写入提交按钮的url重定向代码。现在这只是理论,因为我不确定这是否可行。

如有任何建议,我们将不胜感激。

我至少可以看到另外两种方法:

使用iFrame:

在iFrame外部保留隐藏输入。此输入记录答案。提交问题时,iFrame脚本必须将答案(逗号分隔或其他)附加到父级中的隐藏输入。之后,一个新页面将加载到iFrame中。当遇到最后一个问题时,iFrame脚本可以更新并读取父输入,然后确定要加载哪个url,然后将url加载到父文档位置。

使用jQuery Ajax:EDITED删除此处不需要的隐藏输入:

使用jQueryAjax,您可以将下一个问题加载到主div中,并在jQuery脚本中保留所需答案的值。

编辑:这里有另一种方法,使用CSS和javascript/jQuery:

将所有问题加载到一页中。但只有当前的问题具有style='display:block;',其他必须具有style='display:none'。当问题得到回答时,使用javascript或jQuery将答案记录在变量中。在你的情况下,你似乎只对一个答案感兴趣,所以这更容易。然后使用脚本根据应显示的问题更改显示属性。最后,如果这是提交的最后一个问题,您可以确定url并加载下一个页面。

如何从查询字符串中获取参数:

function getQuery(key_str) {
// return value of key_str variables query string of url
// Example: url = "index.html?answer=5"; if key_str = "answerswer" then it returns "5"
  if(window.location.search) {
    var query = window.location.search.substr(1);
    var pairs = query.split("&");
    for(var i = 0; i < pairs.length; i++) {
      var pair = pairs[i].split("=");
      if(unescape(pair[0]) == key_str) return unescape(pair[1]);
    }
    return null;
  }
}
function go() {
  var answer = getQuery(answer);
  var durl = "http://www.defaulturl.com";
  switch (answer) {
    case '1' : url = "http://www.url1.com"; break;
    case '2' : url = "http://www.url2.com"; break; 
    case '3' : url = "http://www.url3.com"; break;
    default  : url = durl;
  }
  window.location.href = url;
  return false;
}
<input type="button" value="Submit" name="butt" onclick="return go();">

为什么不将相关答案作为GET传递?您可以很容易地读取Javascript中的查询字符串。

您的cookie方法可以正常工作。同样适用于HTML5 local storage。但我不得不问。。。如果你没有在任何地方记录其他9个问题的输出,问他们有什么意义?:)

我会尽我所能避免cookie,只把测验放在一页上。。。我知道你是说你没有后端访问权限,但我只是想把它扔出去。

你可以让用户感觉它实际上是10个"页面",但你的JS会交换"页面"并将表单值存储在一个页面负载中。考虑一个具有10个选项卡的DOM选项卡元素。

完全同意Alex的观点,HTML5本地存储也可以工作。