jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – 触发器点击input =文件异步ajax done()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表单与一些数据和上传。只有在成功接收和处理数据后,才能启动上传。为了做到这一点,我在我的ajax电话

>发送数据,
>检查其结果,
>触发点击()打开文件对话框。

click()的最后一件事情不工作,因为看起来异步@L_696_5@块打开一个上传窗口。它只有当我设置async:false。

找不到任何文档和本网站,想知道什么是那里的问题,如何使它工作保持@L_696_5@异步?

例:

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

//$("#upload").click();       [2]

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

注意:

>如果我取消注释[1]或[2],它会工作(文件对话框按预期显示)。
>用触发器替换click()(‘click’)不起作用
>替换click()with live()/ on()没有帮助
>文件上传控件根据示例是可见的(所以它不是因为隐藏控件)
> ajax的超时设置没有帮助。

更新

它不是如何做一个“点击”一般,它是关于如何点击一个异步ajax@L_696_5@(现在,只适用于非异步@L_696_5@)。

解决方法

现在不可能从一个异步的ajax回调打开一个文件弹出窗口,由于w3c推荐的浏览器的安全功能

文件输入元素的激活行为中,它首先检查算法是否允许显示弹出窗口,如果不是,则中止后续步骤而不做任何其他操作。从@L_696_25@

如果以下任一条件为真,则允许算法显示弹出窗口:

>当前正在处理运行算法的任务
(可信事件:由用户代理生成的由于用户交互或作为DOM更改的直接结果的事件由用户代理信任,该用户代理具有以下特权:不支持通过DocumentEvent.createEvent(“Event”)方法由脚本生成的事件,使用Event.initEvent()方法修改或通过EventTarget.dispatchEvent()方法分派的信任事件的isTrusted属性具有值of true,而不受信任的事件的isTrusted属性值为false。
除此以外。 http://www.w3.org/TR/2012/WD-DOM-Level-3-Events-20120614/#trusted-events.)
>运行算法的任务当前正在运行
事件监听器,用于类型为以下的可信事件
列表:

>更改
>点击
> dblclick
> mouseup
>复位
>提交

>运行算法的任务由a排队
允许显示弹出窗口的算法,以及这样的链
算法在用户代理定义的时间范围内启动。

w3c.org

你的代码中,点击事件不是由用户触发,而是由ajax完成回调触发的。这里的浏览器声明该事件不能被信任打开一个弹出窗口。在某些浏览器中,如果事件被声明为trusted.https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted,您可以看到isTrusted属性设置为true

注意

不同的浏览器使用不同的方法捕获脚本激活的cick和真实用户间的区别。

在这种情况下可以做的是禁用文件输入按钮(或整个窗体),并在ajax完成后启用。这样用户不会点击上传按钮,直到ajax请求完成。到目前为止,没有其他方法来做一次单击,因为有一个时间限制也打开弹出窗口。当我检查chrome的时间框架是1000毫秒。 1000ms后用户操作,窗口不会打开。

大佬总结

以上是大佬教程为你收集整理的jquery – 触发器点击input =文件异步ajax done()全部内容,希望文章能够帮你解决jquery – 触发器点击input =文件异步ajax done()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。