相关疑难解决方法(0)

触发器在异步ajax done()上单击input = file

我有一个包含一些数据和上传的表单.只有在成功接收和处理数据后才能启动上载.为此,我在我的地方进行ajax调用

  1. 发送数据,
  2. 检查结果,
  3. 触发click()打开文件对话框.

click()的最后一件事不起作用,因为似乎异步调用块打开了一个上传窗口.它只有在我设置时才有效async: false.

我在文档和本网站中找不到任何内容,想知道那里有什么问题,以及如何让它保持调用异步?

例:

$.ajax({
    type: "POST",
    url: "/Save",
    data: jsonText,
    dataType: "json",
    //async: false            [1]
}).done(function (msg) {    
    $("#upload").click();   
});

//$("#upload").click();       [2]
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/c2v00uxn/

注意:

  • 如果我取消注释[1]或[2],它确实有效(文件对话框按预期显示).
  • 用触发器替换click()('click')不起作用
  • 用live()/ on()替换click()没有帮助
  • 文件上传控件是可见的(所以它不是因为隐藏控件)
  • ajax的超时设置没有帮助.

UPDATE

它不是关于如何一般地进行"点击",而是关于如何在异步ajax调用之后单击(截至目前,仅适用于非异步调用).

jquery

32
推荐指数
1
解决办法
5190
查看次数

javascript window.open 在 safari 和 chrome 中不起作用

我有一个 div 元素。div 是一个图标。当您单击此图标时,将触发表单提交。在表单提交上有一些计算,这些计算的结果会打开一个新选项卡。

我使用“ window.open(url, '_blank');

但在 safari 和 chrome 中,这个新标签被视为弹出窗口并被阻止。

我试图创建一个隐藏的 a href 并触发点击,以便它会在新选项卡中打开页面,但它不起作用。

知道如何解决这个问题吗?

编辑 - 找到解决方案

您需要在 $.ajax 成功方法中的单击事件上添加 window.open。这样它就会起作用。

$('#myButton').click(function () {
    var redirectWindow = window.open('http://google.com', '_blank');
    $.ajax({
        type: 'POST',
        url: '/echo/json/',
        success: function (data) {
            redirectWindow.location;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/safeeronline/70kdacL4/1/

javascript safari jquery google-chrome onclick

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

jquery ×2

google-chrome ×1

javascript ×1

onclick ×1

safari ×1