从javascript提交表单(使用jQuery)将在Opera12.16的新选项卡中打开
我有一个巨大而恼人的问题 我正在使用jQuery(版本1.7.1,它不是更新jQuery或浏览器的选项 我添加了一些Javascript,将+s作为提交处理,而不是保存 除了Opera,它在所有浏览器中都能很好地工作 在Opera中,它会提交,但会进入一个新的页面 如果有人找到了解决这个问题的方法,你能提供一些帮助吗?我将非常感激 这是一个相当恼人的bug,我在开发的后台办公室中经常使用该功能 下面是使用的Javascript代码示例:从javascript提交表单(使用jQuery)将在Opera12.16的新选项卡中打开,javascript,jquery,html,forms,opera,Javascript,Jquery,Html,Forms,Opera,我有一个巨大而恼人的问题 我正在使用jQuery(版本1.7.1,它不是更新jQuery或浏览器的选项 我添加了一些Javascript,将+s作为提交处理,而不是保存 除了Opera,它在所有浏览器中都能很好地工作 在Opera中,它会提交,但会进入一个新的页面 如果有人找到了解决这个问题的方法,你能提供一些帮助吗?我将非常感激 这是一个相当恼人的bug,我在开发的后台办公室中经常使用该功能 下面是使用的Javascript代码示例: $(window).keydown(function(e)
$(window).keydown(function(e){
if(e.ctrlKey&&e.keyCode==83)
{
e.preventDefault();//disable page saving
var a=$(':focus');//gets the focused element
if(!a.length){a=$('form:eq(0)');}else{a=a.parents('form');}//if no element is focused, gets the 1st form
a.find("input[type=button].submit, button[type=submit], input[type=submit], form a.submit").click();//triggers the click in the button
if(a.find('input[type=submit]'))a.submit();//'silly' line added as a desperate attempt, ignore it
}
});
HTML代码是一个简单的表单,如下所示:
<form action="#" method="POST" [target="_self"]>
<input type="text" name="fld">
<input type="submit" name="sub" value="Submit">
</form>
使用
提交到同一页面和新选项卡。我找到了解决方案
这是一个非常丑陋的黑客
这是新的Javascript:
$(window).keydown(function(e){
if(e.ctrlKey&&e.keyCode==83)
{
e.preventDefault();
var a=$(':focus');
if(!a.length){a=$('form:eq(0)');}else{a=a.parents('form');}
a.find("input[type=button].submit, form a.submit").click();
if(window.opera&&a.find('input[type=submit],button[type=submit]').length)a.submit();
else a.find("input[type=submit],button[type=submit]").click();
}
});
HTML必须更改为:
<form action="#" method="POST" [target="_self"]>
<input type="text" name="fld">
<input type="hidden" name="sub" value="1"><!-- to validate if the form was submitted on opera -->
<input type="submit" name="sub" value="Submit">
</form>
由于表单提交可以在其他浏览器上完美工作,因此我们可以将默认行为留给他们,只更改Opera的工作方式
正如我所说:这是一个丑陋的黑客,但很有效
谢谢你的想法。我只是调整了一下。你能发布现有的代码吗?@scimonester我添加了一个例子,其中使用了部分Javascript。好吧,在按住Ctrl的同时提交表单会将其提交到一个新选项卡。您是否尝试过
form.submit()
而不是触发鼠标单击事件?此外,如果没有任何帮助,你应该尝试keyup
而不是-down。对不起,一点运气都没有。@Bergi我已经找到了一种方法来“修复”它,使用你有用的注释。我希望这能帮助很多人。你为什么不在所有浏览器上都执行a.submit()
?我看不出触发单击事件的原因。因为
和
上的值不会被发送,这是验证是否提交了任何内容所必需的。如果它能在其他浏览器上运行,最好不要弄乱它们。“不要试图修复未损坏的东西”。