Javascript Firefox处理xxx.submit(),Safari不处理';T可以做些什么?

Javascript Firefox处理xxx.submit(),Safari不处理';T可以做些什么?,javascript,django,django-templates,Javascript,Django,Django Templates,当用户从菜单中选择(释放鼠标)其中一个选项时,我试图在表单上创建一个下拉菜单。这段代码在FF中运行良好,但由于某些原因,Safari没有提交表单。我使用jquery重新编写了代码,以查看jquery的.submit()实现是否能更好地处理浏览器的问题。同样的结果,在FF中有效,在safari中无效 以下代码段来自同一个页面,其中混合了一些django模板语言 下面是一个尝试: function formSubmit(lang) { if (lang != '{{ LANGUAGE_COD

当用户从菜单中选择(释放鼠标)其中一个选项时,我试图在表单上创建一个下拉菜单。这段代码在FF中运行良好,但由于某些原因,Safari没有提交表单。我使用jquery重新编写了代码,以查看jquery的.submit()实现是否能更好地处理浏览器的问题。同样的结果,在FF中有效,在safari中无效

以下代码段来自同一个页面,其中混合了一些django模板语言

下面是一个尝试:

function formSubmit(lang) {
    if (lang != '{{ LANGUAGE_CODE }}') {
        document.getElementById("setlang_form").submit();
    }
}
以下是jquery的尝试:

$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form option').mouseup(function () { 
        if ($(this).attr('value') != '{{ LANGUAGE_CODE }}') { 
            $('#setlang_form').submit()
        } 
    });
});
以下是表格:

<form id="setlang_form" method="post" action="{% url django.views.i18n.set_language %}">
    <fieldset>
    <select name="language">
    {% for lang in interface_languages %}
        <option value="{{ lang.code }}" onmouseup="formSubmit('{{ lang.name }}')" {% ifequal lang.code LANGUAGE_CODE %}selected="selected"{% endifequal %}>{{ lang.name }}</option>
    {% endfor %}
    </select>
    </fieldset>
</form>

{%用于接口中的lang_语言%}
{{lang.name}
{%endfor%}

我的问题是,如何在Safari中实现这一点?

您可能应该使用
onchange
事件来代替(或同时使用)。

代码应该是:

<form id="setlang_form" method="post" action="{% url django.views.i18n.set_language %}">
    <fieldset>
    <select name="language" onchange="formSubmit(this)">
    {% for lang in interface_languages %}
        <option value="{{ lang.code }}" {% ifequal lang.code LANGUAGE_CODE %}selected="selected"{% endifequal %}>{{ lang.name }}</option>
    {% endfor %}
    </select>
    </fieldset>
</form>
您也可以使用jquery执行此操作:

$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form select').change(function () { 
        ....     $("select option:selected").text() ....  
        } 
    });
});
查看此处了解Jquery的更改事件: xxx.submit()似乎对我也不起作用。简单但难看的修复方法是在页面的HEAD标记中使用submit函数,而不是外部JS文件,并使用document.getElementById('表单的id是什么?).submit,而不是定义一个var然后执行var.submit()

不要问为什么。但这是我使用submit()函数让safari实际提交的唯一方法。

我投票赞成“改为”。不需要在选项上抓住鼠标。这甚至是不明智的,因为键盘启动的事件将被错过。
$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form select').change(function () { 
        ....     $("select option:selected").text() ....  
        } 
    });
});