1

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

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

这是香草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 中工作?

4

3 回答 3

2

您可能应该使用 theonchange事件来<select>代替(或同时使用)。

于 2008-12-02T08:25:32.747 回答
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

于 2008-12-02T08:29:38.247 回答
0

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

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

于 2008-12-04T03:05:21.270 回答