代码之家  ›  专栏  ›  技术社区  ›  2snacc

Firefox处理xxx.submit(),Safari不处理。..我们能做什么?

  •  1
  • 2snacc  · 技术社区  · 17 年前

    当用户在菜单中的一个选项上选择(释放鼠标)时,我试图制作一个下拉菜单来发布表单。这段代码在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 回复  |  直到 16 年前
        1
  •  1
  •   netadictos    17 年前

    你可能应该使用 onchange 事件 <select> 相反(或也是)。

        2
  •  2
  •   Greg    17 年前

    代码为:

    <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

        3
  •  0
  •   Thomas Harvey    17 年前

    xxx.submit()似乎也从未对我奏效。简单但丑陋的修复方法是在页面的HEAD标签中使用submit函数,而不是外部JS文件,并使用document.getElementById('whatever_the_id_of_the_form_is).submit,而不是定义一个var然后执行var.submit()

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

    推荐文章