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】:您可能应该使用<select>
的onchange
事件来代替(或同时使用)。
【讨论】:
我投票赞成“代替”。无需在选项上抓住鼠标。这甚至是不明智的,因为键盘启动的事件将被错过。以上是关于Firefox 处理 xxx.submit(),Safari 不处理……能做啥?的主要内容,如果未能解决你的问题,请参考以下文章
s-s-rS 2008 R2 - s-s-rS 2012 - ReportViewer:在 Safari/Chrome 中报告,但在 Firefox/Internet Explorer 8 中运行良好
为啥 Chrome 或 Firefox 不显示待处理请求的请求标头?
在 Python 中使用 Selenium WebDriver 时处理 Firefox 无响应?
Mozilla 宣布 Firefox 49 将修改根证书处理过程
webdriver 操作 Firefox 在关闭浏览器时弹出 “Plugin Container for Firefox已停止工作” 处理办法