【问题标题】:JavaScript Function Doesn't Work On DjangoJavaScript 函数在 Django 上不起作用
【发布时间】:2019-07-24 21:39:45
【问题描述】:

加载第一页时,我希望用户看到所有音乐,但如果他从 RadioButton 中选择一个列表,我只想要该列表中的音乐,但 javascript 函数不起作用。

让我补充一点,我通常不知道 JavaScript,但我需要使用它。

<div style = "margin-top : 100px;"class = "container">
        {% for table in tables %}
        <input type="radio" name="list1" onclick="mL('{{table}}')"> {{table}}
        {% endfor %}
        <div align="center">
            <audio class="my_audio" controls="controls" autoplay="autoplay" style="width:500px;"></audio>
            <ul>
            {% for table in tables  %}
                {% for music in musics %}
                    <li style="list-style-type:None">
                        <a id="{{table}}" href="javascript:void(0);" onclick="playSong('{{music}}')">{{music}}</a>
                    </li> 
                {% endfor %}
            {% endfor %}
                {% for music in musics %}
                    <li style="list-style-type:None">
                        <a id="default" href="javascript:void(0);" onclick="playSong('{{music}}')">{{music}}</a>
                    </li> 
                {% endfor %}

            </ul>
        </div>
    </div>

<script> function mL(x)
    {
        {% for table in tables  %}
            if (x=={{table}})
            document.getElementById("{{table}}").style.display="block";
            document.getElementById("default").style.display="none";
        {% endfor %}
            else
            document.getElementById("{{table}}").style.display="none";
            document.getElementById("default").style.display="block";
            return;
    }
    </script>

【问题讨论】:

    标签: javascript django python-3.x


    【解决方案1】:

    这不是 Django 问题,纯粹是关于 JavaScript(或应该是)。

    以下是您的代码存在的一些问题:

    • 在 HTML 中,id 属性在文档中应该是唯一的。您似乎有许多具有相同 ID 的 &lt;a&gt; 标签。使用class 属性,或者更好地使用您自己的数据属性,例如data-table
    • 可以代码使用 Django 模板标签生成 JavaScript,但我认为这是一个坏主意,因为很难推断代码将如何工作。不要在 &lt;script&gt; 块内使用 {% for %}
    • JavaScript 不像 Python 那样在代码块中使用空格。您需要改用大括号{ }

    一旦这些问题得到修复,请使用浏览器中的调试控制台(Firefox 和 Chrome 中的 F12)。它会让你看到任何语法错误,你甚至可以在控制台中运行代码来查看像document.getElementById 这样的东西是如何工作的。

    【讨论】:

    • 你说的我改变了很多。但是,当 document.getElementsByClassName(param) 代码在按 F12 打开的页面上运行时,document.getElementsByClassName(param).style.display 代码会失败。错误是:Uncaught TypeError: Can't set property 'display' of undefined
    • 使用调试控制台来帮助解决这个问题。你可以输入document.getElementsByClassName("tablename"),回车并检查返回的内容(提示:这是一个数组!)。坚持下去,直到找到有效的方法。
    猜你喜欢
    • 2015-10-14
    • 2016-07-07
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 2021-05-12
    相关资源
    最近更新 更多