【问题标题】:Firefox handles xxx.submit(), Safari doesn't ... what can be done?Firefox 处理 xxx.submit(),Safari 不处理……能做什么?
【发布时间】:2010-09-24 21:39:46
【问题描述】:

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

以下sn-ps来自同一页面,其中混入了一些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 中工作?

【问题讨论】:

    标签: javascript django django-templates


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      代码是:

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

        您可能应该使用&lt;select&gt;onchange 事件来代替(或同时使用)。

        【讨论】:

        • 我投票赞成“代替”。无需在选项上抓住鼠标。这甚至是不明智的,因为键盘启动的事件将被错过。
        猜你喜欢
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多