当用户从菜单中的一个选项中选择(释放鼠标)时,我正在尝试在表单上发布一个下拉菜单。此代码在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中使用它?
答案 0 :(得分:2)
您应该使用onchange
的{{1}}事件代替(或同样)。
答案 1 :(得分: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
答案 2 :(得分:0)
xxx.submit()似乎从来没有对我有用。简单但丑陋的修复是使用在页面的HEAD标记中执行提交的函数而不是外部JS文件,并使用document.getElementById('whatever_the_id_of_the_form_is).submit而不是定义var然后执行var .submit()
不要问为什么。但这是我可以使用submit()函数实际提交safari的唯一方法。