【问题标题】:JavaScript and HTML element manipulationJavaScript 和 HTML 元素操作
【发布时间】:2019-07-29 23:36:54
【问题描述】:

项目概念:创建一个“考试工具”,教师可以访问它来创建并让学生能够访问它来参加。将包括许多功能,但为了让手头的问题保持简单,我不会包括所有信息。

前端:使用 php 文件将数据库中的所有问题列出到 HTML 中的选择字段中。选择该项目后,将其添加到测试中。显示测试,并为每个问题分配分数。

我的实际问题/帮助:我的 addq() 函数应该获取所选项目的值,将其附加到全局 testArray=[];而 for 循环遍历每一个以在添加每一个后单独显示它们。

问题:我在 HTML 中显示的内容...它不断添加数组,因此在每个 addq() 之后一遍又一遍地重复输出。请帮忙解决! -- 数组需要在函数之外,以便我稍后可以访问它并将它发送到一个 php 文件。

<h4><center>Test</center></h4>
 <ol id="test">
</ol>



<script>

var testArray= [];

function addq(){

     var addingquestion = document.getElementById('questionSelect').value;
     var myArray = testArray.push(addingquestion);
     var node = document.createElement("LI");

     for(i=0;i<20;i++){

     var textnode = document.createTextNode(testArray[i].toString());
     node.appendChild(textnode);
     document.getElementById("test").appendChild(node);
      }
    }
</script>

示例输出问题图片: enter image description here

【问题讨论】:

  • 因为你做了一个 li 并不断向其中添加文本....每次迭代都需要一个新的 li。
  • 如果我将“li”移动到循环中,它将继续添加额外的元素......我哪里出错了? @epascarello
  • 这就是我认为你想要的......

标签: javascript php html for-loop


【解决方案1】:

问题是您每次都将数组附加到节点元素。所以,每次它都会输出旧值和新值

你不必把它做成一个数组,因为它没有数组就堆叠起来,

你只需要替换这个:

 var textnode = document.createTextNode(testArray[i].toString());

用这个:

 var textnode = document.createTextNode(addingquestion);

【讨论】:

  • 这要简单得多.. 哇!我想知道您是否可以为每个可以填写的问题添加一个文本框,并将数据传递给一个 php 文件。例如......它将列出“问题1”[textbox1]“问题2”[textbox2] ..等。不确定如何为每个提交的问题添加一个文本框,感谢任何帮助!
  • 这取决于你想要做什么
  • 所以目标是 .. 添加要显示的问题。 (已成功完成) .. 给每个问题一个文本框以进行抽签。问题1 = 10 分。等等就像一个正常的考试。然后将信息、问题和分数...发送出去。这些信息足以获得建议吗?
  • 我不太擅长后端,但我想我可以提供帮助。例如,您需要在数据库中创建一个名为“text”的表。在它和问题表之间建立关系,添加问题后,您可以将用户重定向到一个页面,他可以在其中为他们添加的每个问题添加文本......例如在添加 3 个问题后,从数据库并在保存时将它们与文本表连接.. 问题 1: 问题 2: 问题 3:
  • 您必须确保这两个表通过 ID 相互连接,问题必须有一个 id 列,文本必须有一个名为 question_id 的列,例如希望有所帮助:)
【解决方案2】:

在这里,你需要每次都创建你的 LI,它是一个对象。

var testArray = [1,2,3,4,5,6,7,8,9,10];

function addq() {
  // REMOVED because not provided.
  //let addingquestion = document.getElementById('questionSelect').value;
  //let myArray = testArray.push(addingquestion);
  let test = document.querySelector('#test');

  testArray.forEach(t => {
    // create new li for each item.
    let li = document.createElement('li');
    let textnode = document.createTextNode(t);
    li.appendChild(textnode);
    test.appendChild(li);
  });
}

addq();
<h4>
  <center>Test</center>
</h4>
<ol id="test">
</ol>

【讨论】:

  • 这里的问题是每次用户选择一个值时他都在运行该函数而不删除旧值,所以第一次是问题1,第二次是问题1 + question1 & question2,依此类推。 ..
  • 啊,明白了。谢谢@MohamedAshraf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2012-08-02
  • 1970-01-01
  • 2018-01-29
  • 2010-10-04
相关资源
最近更新 更多