javascript - 为什么javascript触发提交表单(方法获取,目标空白)打开弹出窗口而不是新选项卡?

标签 javascript forms google-chrome

仅在 Chrome 上...

<form action="http://example.com" method="get" target="_blank">
<input type="text" name="somename" value="some val">
<input type="submit">
</form>

从控制台、超时函数或其他什么执行这个js...

document.forms[0].submit();

如果提交是通过实际点击“提交”按钮触发的,表单将正常工作,但如果提交是通过 javascript 触发的,它将打开弹出窗口。

我需要与此完全相同的表单(方法获取,目标空白),并且必须通过 javascript 触发提交,因为在提交之前需要完成多个 ajax 请求...

有人知道解决方法吗?

致:邓肯·考恩

$('button').on('click', function(){
    // Validation
    // foo
    // bar
    // ...
    // var errors = true;

    window.promises = new Array;

    // do ajax calls and add hidden inputs...  
    window.promises.push($.ajax({ /* Call ...*/ }));
    window.promises.push($.ajax({ /* Call ...*/ }));
    window.promises.push($.ajax({ /* Call ...*/ }));

    // not always the case
    var promis = true;


    // once inputs are placed... submit
    if (promis) {
        $.when.apply($, window.promises).done(function() {
            // Do submit
            $('form').trigger('submit');
        });
    }

    // errors or promises cancel submit
    if ( errors || promis ) {
        return false;
    }
});

最佳答案

为了使浏览器不将其归类为弹出窗口,您需要使用可信事件(即用户单击某些内容等)触发表单提交。如果您需要在提交之前、受信任事件之后运行 ajax,则应该以同步模式运行 (async: false)。

例如,用户点击某处,同步ajax请求,然后提交表单。

如果您使用某种非用户启动的事件触发打开新窗口,浏览器会认为它是弹出窗口,并且通常会阻止它。

好的,不用通过 Promise 来运行 AJAX,只需直接在 click 函数中运行即可。但是,将“async”设置为“false”,以便代码停止并等待 ajax 完成。

$('button').on('click', function(){
    // Validation
    // foo
    // bar
    // ...
    // var errors = true;

    // do ajax calls and add hidden inputs...  
    $.ajax({asyc: false, /* Call ...*/ });
    $.ajax({asyc: false, /* Call ...*/ });
    $.ajax({asyc: false, /* Call ...*/ });

    $('form').trigger('submit');

});

关于javascript - 为什么javascript触发提交表单(方法获取,目标空白)打开弹出窗口而不是新选项卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24607020/

相关文章:

javascript - 任何 backbone.js 书籍可用吗?

javascript - 如何让d3旭日从3点钟开始?

html - 如何格式化 Bootstrap 输入表单 - 所有标签具有相同的宽度

javascript - 手动调整元素大小不会触发 Chrome 中的突变观察器

javascript - 如何使用 javascript 读取文件的第二行

javascript - 密码验证不起作用

html - 有没有办法忽略表单响应?

html - JavaScript 无法调用内容脚本 JS 函数

javascript - WebClientPrint 用于 Chrome 上的客户端打印 javascript 问题

javascript - 如何使用 JavaScript 根据表单条目计算 future 日期?