打开新的空白 window,添加输入元素,然后将点击事件分派给不起作用的元素

Open new blank window, add input element and then dispatching a click event to the element not working

出于正当理由,我正在尝试使用网络浏览器做一些奇怪的事情。我正在尝试做的事情以及我是如何做的如下。

  1. 点击某个按钮后创建一个新空白window。

    var newWindow = window.open('', 'new window', spec, true);

  2. 在新的window中添加一个文件类型的输入元素。

    newWindow.document.write('<输入类型="file" id="select-file" >');

  3. 立即向上面的输入元素发送点击事件。

    newWindow.document.getElementById('select-file').dispatchEvent(新事件('click'));

所有三个步骤都在一个函数中完成,该函数通过单击第 1 步中提到的按钮触发。单击该按钮时,第 1 步肯定会创建一个新的 window,第 2 步将插入输入元素。但是,第 3 步会毫无错误地通过。当我在 window 保持打开状态时再次按下按钮时,只有这样第 3 步才会按我预期的那样工作。

这两种情况的唯一区别是只有在必须创建 window 时才会执行步骤 1、2。当 window 已经打开并重复使用时,步骤 1、2 将被忽略。

因此,我假设调度鼠标事件一定有问题。但我不知道。有人可以详细说明一下吗?

我尝试处理的代码与我制作的这个示例类似。

`http://jsfiddle.net/dansoonie/q8tzyx6z/`

我认为由于其他一些 JSfiddle 问题,它无法正常工作,但如果我的解释无法理解,请查看。提前致谢。

出于安全考虑,在大多数浏览器中禁止从 JS 触发输入元素上的点击事件

检查这个问题In JavaScript can I make a "click" event fire programmatically for a file input element?

在给定的 fiddle 行下方更改

$(newWindow.document.body).find('input-file').click();

$(newWindow.document.body).find('#input-file').click();

in jQuery 要使用 ID 访问元素,您必须在前面添加 #

http://jsfiddle.net/santoshj/q8tzyx6z/1/