Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript提交表单(使用jQuery)将在Opera12.16的新选项卡中打开_Javascript_Jquery_Html_Forms_Opera - Fatal编程技术网

从javascript提交表单(使用jQuery)将在Opera12.16的新选项卡中打开

从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)

我有一个巨大而恼人的问题

我正在使用jQuery(版本1.7.1,它不是更新jQuery或浏览器的选项

我添加了一些Javascript,将+s作为提交处理,而不是保存

除了Opera,它在所有浏览器中都能很好地工作

在Opera中,它会提交,但会进入一个新的页面

如果有人找到了解决这个问题的方法,你能提供一些帮助吗?我将非常感激

这是一个相当恼人的bug,我在开发的后台办公室中经常使用该功能

下面是使用的Javascript代码示例:

$(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()
?我看不出触发单击事件的原因。因为
上的值不会被发送,这是验证是否提交了任何内容所必需的。如果它能在其他浏览器上运行,最好不要弄乱它们。“不要试图修复未损坏的东西”。