Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在刷新网页之前加载javascript_Javascript_Html_Jquery_Django_Google Maps - Fatal编程技术网

在刷新网页之前加载javascript

在刷新网页之前加载javascript,javascript,html,jquery,django,google-maps,Javascript,Html,Jquery,Django,Google Maps,以下是我的HTML代码: <script src="https://maps.googleapis.com/maps/api/js?key=mykey&callback=initMap&v=quarterly" defer></script> <script src="{% static '/javascript/maplanguage.js' %}"></script> &

以下是我的HTML代码:

<script src="https://maps.googleapis.com/maps/api/js?key=mykey&callback=initMap&v=quarterly" defer></script>
<script src="{% static '/javascript/maplanguage.js' %}"></script>


       <form action="{% url 'set_language' %}" method="post">{% csrf_token %}
            <input name="next" type="hidden" value="{{ redirect_to }}" />
            <select id="sel_id" name="language" onchange="this.form.submit();">
            {% get_current_language as LANGUAGE_CODE %}
            {% get_available_languages as LANGUAGES %}
            {% get_language_info_list for LANGUAGES as languages %}
            {% for language in languages %}
            <option class="option" value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %} >
                {{ language.name_local }} ({{ language.code }})
            </option>
            {% endfor %}
            </select>

    </form>
但问题是: 当我从下拉列表中选择一个选项时,页面将立即刷新。 然后我无法在JS中获得“lang”的值。[这意味着“警报”可以在刷新页面之前工作,但是“console.log”没有任何内容


那我怎么能让我的页面等待我的JS呢?

在你的HTML中,你的表单会在每次选择更改时提交。提交表单意味着整个页面都会刷新,因此即使你更改了谷歌地图语言,页面刷新后它也会丢失。(除非你先将其存储在某个地方)

有几种方法可以解决这个问题:

  • 您应该让页面刷新,并通过Django在head脚本中设置一个全局值,然后使用该值设置Google地图的语言
  • i、 e

    
    变量lang={%currentLang%}
    
  • 将lang设置为本地存储(或cookie)后提交表单。然后当页面刷新后,从本地存储抓取
    lang
    ,并将其传递给google地图。 请注意,下面是一些伪代码,需要验证表单是否仍在该函数中提交
  • i、 e

    
    函数onSelectChange(){
    var elem=document.getElementById('sel_id');
    var langValue=elem.options[elem.selectedIndex].value;
    setItem('lang',langValue);
    这个.form.submit();
    }
    
    。。。
    
    使用键从localstorage获取值

    
    var lang=localStorage.getItem('lang');
    
    用它来设置谷歌地图的语言,我怎么能这样做呢?因为我尝试了
    在'lang'中有一个错误,而且我在第12行得到了无效的块标记:'currentLang'。你忘记注册或加载这个标记了吗?当我添加
    var lang={%currentLang%}
    到我的'base.html'。我如何解决它呢?你需要使用Django的模板括号在那里插入语言代码。我不熟悉Django(这是一种服务器语言),但我的想法是使用它从服务器端确定语言并插入到脚本标记中。例如:
    …&language={%language%}&…
    对于无效块问题,“我的代码”仅作为示例显示。您需要有一种方法从服务器获取语言代码,并将其分配给类似currentLang的内容。
    #maplanguage.js
    
    document.getElementById('sel_id').addEventListener('change', () => {
            let lang = $(this).find('option:selected').val();
    //        console.log(lang);
    //        alert("You have selected the language code: " + lang);