Firefox 处理 xxx.submit(),Safari 不处理……能做啥?

Posted

技术标签:

【中文标题】Firefox 处理 xxx.submit(),Safari 不处理……能做啥?【英文标题】: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 中工作?

【问题讨论】:

【参考方案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 事件来代替(或同时使用)。

【讨论】:

我投票赞成“代替”。无需在选项上抓住鼠标。这甚至是不明智的,因为键盘启动的事件将被错过。

以上是关于Firefox 处理 xxx.submit(),Safari 不处理……能做啥?的主要内容,如果未能解决你的问题,请参考以下文章

s-s-rS 2008 R2 - s-s-rS 2012 - ReportViewer:在 Safari/Chrome 中报告,但在 Firefox/Internet Explorer 8 中运行良好

Chrome/FireFox处理JSON的插件

为啥 Chrome 或 Firefox 不显示待处理请求的请求标头?

在 Python 中使用 Selenium WebDriver 时处理 Firefox 无响应?

Mozilla 宣布 Firefox 49 将修改根证书处理过程

webdriver 操作 Firefox 在关闭浏览器时弹出 “Plugin Container for Firefox已停止工作” 处理办法