Firefox处理xxx.submit(),Safari没有...可以做什么?

时间:2008-12-02 08:22:25

标签: javascript django django-templates

当用户从菜单中的一个选项中选择(释放鼠标)时,我正在尝试在表单上发布一个下拉菜单。此代码在FF中工作正常,但由于某些原因,Safari不提交表单。我使用jquery重新编写代码,看看jquery的.submit()实现是否更好地处理了浏览器怪癖。相同的结果,FF中的工作在safari中不起作用。

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

这是vanilla js的尝试:

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>

我的问题是,我怎样才能在Safari中使用它?

3 个答案:

答案 0 :(得分:2)

您应该使用onchange的{​​{1}}事件代替(或同样)。

答案 1 :(得分:1)

代码如下:

<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>

获取值:

function formSubmit(theForm)
{
 .... theForm.options[theForm.selectedIndex].value
}

您也可以使用jquery:

$(document).ready(function() {
    $('#lang_submit').hide()
    $('#setlang_form select').change(function () { 
        ....     $("select option:selected").text() ....  
        } 
    });
});

通过Jquery了解更改事件: http://docs.jquery.com/Events/change

答案 2 :(得分:0)

xxx.submit()似乎从来没有对我有用。简单但丑陋的修复是使用在页面的HEAD标记中执行提交的函数而不是外部JS文件,并使用document.getElementById('whatever_the_id_of_the_form_is).submit而不是定义var然后执行var .submit()

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