2017-09-06 24 views
0

我一直在试图创建一个网页,在收到用户输入后,它会显示按下提交后的所有用户输入的历史记录,但这是按预期工作。不过,我想实现一个警报框,它会显示更多信息。然而,由于其他所有内容都可以正确打印,因为警告框使用onclick事件,所以只会输出最后一个用户输入样本。使用jinja2循环javascript报警

<!doctype html> 
<html> 
<head> 
    <title>Enrolment page</title> 
</head> 
<body> 
    {% if all_users %} 
     {% for user in all_users %} 
      <h1> Hi, {{ user[0] }}) </h1> 
      <button onclick="myFunction()">Details</button> 
      <script> 
       function myFunction() { 
        alert("{{ user[1] }}, {{ user[2] }}"); 
       } 
      </script> 
     {% endfor %} 
    {%else%} 
     No users to show 
    {% endif %} 
</body> 
</html> 

在我的代码中,all_users是来自csv文件的信息,但是工作正常。我唯一的问题是警报没有显示我想要的信息。有没有办法在每个脚本中存储每组用户详细信息以打印出每个按钮,因为它只显示最后一组用户详细信息。

+0

如果我正确理解你的意图,我认为你在Jinja2 for循环内发生了太多事情,即重复的代码不应该重复。不要只看这个代码产生的功能结果,而是尝试查看生成的html源代码并从那里开始调试。 –

+0

@TimD你的意思是不应该重复哪部分? –

+0

如果你在all_users中有N行,这段代码会产生N次带有“Hi,user [0]”的html源代码,产生N个按钮和N个脚本函数等。我想,如果我正确地遵循。 –

回答

0

可以绑定user[0]user[1]myFunction()调用,比如:

{% for user in all_users %} 
    <h1> Hi, {{ user[0] }}) </h1> 
    <button onclick="myFunction('{{user[1]}}, {{user[2]}}')"> 
     Detail 
    </button> 
{% endfor %} 

然后更改的功能:

function myFunction(users) { 
     alert(users); 
} 
+0

它不起作用,有什么我失踪? –

+0

我重新测试并做出了最后一次更改,一切正常。我相信这是你正在寻找的。现在编辑原件。将函数脚本放在body标签的外部。 –

0

要在Jinja2的工作,这一点,你可以尝试使用一个字符串变量并附上每个值(代码未测试):

<!doctype html> 
<html> 
<head> 
    <title>Enrolment page</title> 
</head> 
<body> 
    {% if all_users %} 
     {% set AllUserList = "" %} 
     {% for user in all_users %} 
      {% set AllUserList = AllUserList + user[1] + ", " + user[2] + "\n" %} 
      <h1> Hi, {{ user[0] }}) </h1> 
      <button onclick="myFunction()">Details</button> 
      <script> 
       function myFunction() { 
        alert("{{ AllUserList }}"); 
       } 
      </script> 
     {% endfor %} 
    {%else%} 
     No users to show 
    {% endif %} 
</body> 
</html> 
+0

jinja2.exceptions.UndefinedError:列表对象没有元素3.我该如何解决这个问题? –

+0

我进一步修改了代码。 –

+0

它看起来像在代码中工作,但按钮仍然没有响应。 –