为什么我的js函数在script标签内部起作用,为什么不在外部javascript文件Django表单中起作用

时间:2020-06-26 00:22:31

标签: javascript django

我有一个表单,当检查组件时会显示纯文本,如下所示

class CompanySearchForm(forms.Form):
    check = forms.BooleanField()

    def __init__(self, *args, **kwargs):
        super(CompanySearchForm, self).__init__(*args, **kwargs)
        self.fields['check'].widget.attrs.update({"onclick": 'show_p()', 'id': 'check'})

我还有具有以下功能的js文件

function show_p() {
    var checkBox = document.getElementById("check");
    var texto = document.getElementById("text");
    if (checkBox.checked == true){
        texto.style.display = "block";
    } else {
        texto.style.display = "none";
    }
}

我的模板:

{% extends 'base.html' %}
{% load static %}
{% block extra_styles %}
    <script href="{% static 'js/ajax_ubigeo.js' %}"></script>
{% endblock %}
{% block content %}
    <form action="" method="post">
        {% csrf_token %}
        {{ form.check }}
    </form>
    <p id="text" style="display: none">hola</p>
{% endblock %}

我的问题是为什么 show_p() script 标记内和模板内起作用。但是,为什么不在外部 java脚本文件中?

2 个答案:

答案 0 :(得分:-1)

它不在同一块中。您没有在实际的基本模板中呈现script标签。将所有内容包装在同一块中,或将脚本添加到基本模板中。

答案 1 :(得分:-1)

替换:

<script href="{% static 'js/ajax_ubigeo.js' %}"></script>

使用:

<script src="{% static 'js/ajax_ubigeo.js' %}" type="text/javascript"></script>

看看会发生什么。理由是:

href请求资源,例如网页,表单处理程序,块 引用参考页或样式表。在很多情况下(保存样式 表格),该链接将打开一个新网页,从该网页可以返回 应该使我们返回上一页。

src表示嵌入当前文档中的资源, 例如img,视频,音频或脚本。浏览器将分配 屏幕的实际面积取决于 嵌入式对象。 href没有此类规定。

此外,请确保该文件存在于您要告诉静态对象的位置。

如果仍不能解决问题,请发布您的base.html模板,或确保其中存在extra_styles块。呈现页面时,在查看页面的源代码时是否显示脚本块?

ref:https://discuss.codecademy.com/t/whats-the-difference-between-href-and-src-attributes/353244