![](/img/trans.png)
[英]What is the non-jQuery equivalent of '$(document).ready()'?
[英]cannot find non-jQuery equivalent for “trigger”
Tigran Saluev建议使用以下答案来手动触发选择文件的提示,但是代码使用jQuery。 他的代码如下:
var input = $(document.createElement("input"));
input.attr("type", "file");
input.trigger("click");
在我的项目中,我想要等效的效果,但没有jQuery。 我以为我在这里:
var input = document.createElement("input");
input.setAttribute("type", "file");
input.dispatchEvent(new Event("click"));
但是什么也没发生。 我做错了什么?
在您的情况下,只需一个简单的click()调用即可触发事件。 或者,如果要使用调度事件,则要创建一个鼠标事件并触发它。
var fi = document.querySelector("#f"); // simple call to click() document.querySelector("button.test1").addEventListener("click", function() { f.click() }); // Or with dispatch event document.querySelector("button.test2").addEventListener("click", function() { var event = new MouseEvent('click', { view: window, bubbles: true, cancelable: true }); fi.dispatchEvent(event); });
<input id="f" type="file" /> <button class="test1" type="button"> CLICK ME 1</button> <button class="test2" type="button"> CLICK ME 2</button>
您可以使用initMouseEvent
作为trigger
的替代方法
function clickSimulation(id) {
var theEvent;
var theElement = document.getElementById(id);
if (document.createEvent) {
theEvent = document.createEvent("MouseEvents");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
}
(theEvent) ? theElement.dispatchEvent(theEvent) : (theElement.click && theElement.click());
}
var input = $(document.createElement("input"));
input.attr("type", "file");
input.attr("id", "TheFileCatcher");
clickSimulation("TheFileCatcher");
我认为您只是缺少一个事件监听器。 尝试以下构造:
// Create an input object
var input = $(document.createElement("input"));
input.attr("type", "file");
// Add an event listener
input.addEventListener("click", function(e) {
console.log(e.detail);
});
// Create the event
var event = new CustomEvent("click", { "detail": "My click event" });
// Dispatch/Trigger/Fire the event
input.dispatchEvent(event);
您还可以尝试使用一种事件类型进行“播放”,因此可以click
Custom(自定义)来代替CustomEvent
,尝试使用与在代码中相同的方法。 我认为问题是因为您缺少事件监听器
参考原始答案
编辑找到有关安全性限制的信息,用于以编程方式触发文件输入
为了安全起见,当输入字段未收到直接单击(或键盘)事件时,大多数浏览器都会阻止提交文件。 某些浏览器(例如Google Chrome)仅阻止单击事件,而Internet Explorer则不提交通过程序触发的文件输入字段选择的任何文件。 到目前为止,Firefox 4(及更高版本)是唯一完全支持调用“ click”-完全隐藏(显示:无)文件输入字段中的事件的浏览器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.