以下代码中为何timeout设置1000可以正确弹出文件选择框,而2000或者更长的时间就没反应,求解??我将timeout换成一个ajax请求后的响应处理也是没反应。<body>
<div>
<input type="file" name="file" id="file1" style="display: none;" /> 
<input type="button" value="btn1" id="btn1" /> 
<input type="button" value="btn2" id="btn2" />
</div>
<script src="js/jquery.min.js" type="text/javascript"></script> <script type="text/javascript">
function dobtn1() {
$("#btn2").click();
} function dobtn2(callback) {
setTimeout(function() {
callback.call();
}, 2000); //1000可以
} $("#btn2").on('click', function() { dobtn2(function() {
$("#file1").click();
});
}); $("#btn1").on('click', function() {
dobtn1();
});
</script>
</body>

解决方案 »

  1.   

    换成叼毛都起不了作用!!!!!因为file标签必须鼠标点击才能激发,
    js模拟点击无效!!!这是web安全原则问题!!
      

  2.   

    https://blog.csdn.net/business122/article/details/8542890
      

  3.   

    换成一个同步async: false的ajax请求应该查可以。
      

  4.   

    感谢1、2、3楼三位兄dei的回答,做个回复:回复一楼@丰云:
        我用的比较新版的Chrome,所以用JS模拟鼠标点击是可行的
        只是我在触发模拟点击之前,等待了一段时间(大于1秒),等待过后的触发没反应。回复二楼@__紫菜:
        模拟点击是可以,我主要的问题是接收到用户点击之后,为什么不能等一会儿模拟触发input:file的点击事件。回复三楼@天际的海浪:
        我替换的ajax请求就是async的,但是没有作用,最终的实现效果就是需要经过一次请求验证后再弹出文件选择框。
      

  5.   

    ​Javascript BOM 之 定时器 http://www.verejava.com/?id=17234560030637
      

  6.   

    function dobtn2(callback) {
                setTimeout(callback, 2000); //1000可以
            }