- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在获取 dispatchEvent
时遇到问题上类。我正在尝试消除对 jQuery 的依赖,并且一直在对 native API 进行自己的小扩展,但我无法获取我的 trigger
版本使用 dispatchEvent
工作.
在控制台记录所有内容后,我知道 eventType
正在传入,event
正在创建对象,并且 this
指的是正确的目标元素。这是我得到的代码,如果有任何帮助,我将不胜感激。
if (!EventTarget.prototype.trigger) {
function triggerFunction(
eventType) {
const event = new CustomEvent(eventType, {
bubbles: true,
cancelable: true
});
this.dispatchEvent(event);
}
EventTarget.prototype.trigger = triggerFunction;
}
编辑
这是其余的代码。确实没什么,因为我主要专注于构建我的扩展。
if (!EventTarget.prototype.on) {
function onFunction(
eventType,
targetElement,
listener) {
if (targetElement) {
this.addEventListener(eventType, function (
event) {
const target = event.target;
if (target
&& target.nodeName !== targetElement) {
return;
}
listener.call(target, event);
}, false);
return this;
}
this.addEventListener(eventType, listener, false);
return this;
}
EventTarget.prototype.on = onFunction;
}
const _pointerTap = "click";
const photosFunction = () => {
const $buttonPhotosUpload = document.getElementById("button-photos-upload"),
$fieldPhotosUpload = document.getElementById("field-photos-upload");
const onButtonPhotosUploadTap = () => $fieldPhotosUpload.trigger(_pointerTap);
$buttonPhotosUpload.on(_pointerTap, null, onButtonPhotosUploadTap);
};
document.getElementById("photos") && photosFunction();
和 HTML:
<div id="photos">
<div>
<button type="button" id="button-photos-upload">{UPLOAD}</button>
<input type="file" id="field-photos-upload" accept="image/*" multiple />
</div>
</div>
基本上,当按下按钮时,我想触发 input:file 的单击事件,这样我就可以用 CSS 直观地隐藏它。在我的 jQuery 版本中,这工作得很好。
最佳答案
问题是,浏览器不仅查看 Event 的 type
属性,还要求它继承正确的 Event 子类。
在这种情况下,他们想要的 Event 的一个子类是 MouseEvent,因此您必须执行 dispatchEvent(new CustomEvent('click'));
而不是 >dispatchEvent(new MouseEvent('click'))
.
(MCVE 借自 @CertainPerformance 答案)。
function triggerMouseFunction(eventType) {
// here event must be MouseEvent for it to work on <input>
const event = new MouseEvent(eventType, {
bubbles: true,
cancelable: true
});
this.dispatchEvent(event);
}
if (!EventTarget.prototype.triggerMouse) {
EventTarget.prototype.triggerMouse = triggerMouseFunction;
}
const button = document.querySelector('button');
const input = document.querySelector('input');
button.addEventListener('click', () => {
input.triggerMouse('click'); // Works
});
<div>
<button type="button">{UPLOAD}</button>
<input type="file">
</div>
但是,如果您真正想要的只是触发点击事件,那么无论如何只需使用 HTMLElement.click()
。
不需要任何lib,也不需要修改EventTarget的原型(prototype),这是一个非常糟糕的主意。
const button = document.querySelector('button');
const input = document.querySelector('input');
button.addEventListener('click', () => {
input.click(); // Works
});
<div>
<button type="button">{UPLOAD}</button>
<input type="file">
</div>
关于JavaScript dispatchEvent 未调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54139084/
我正在使用 Angular2 + TypeScript,当我尝试执行这段代码时: var event = new Event('check'); window.dispatchEvent(event)
在我的 Angular 应用程序中,我必须打开一个新窗口并将一个事件发送回 Controller 。该代码适用于 Chrome 和 Firefox,但它不适用于 Edge 下面是来自外部文件的代码 t
我在获取 dispatchEvent 时遇到问题上类。我正在尝试消除对 jQuery 的依赖,并且一直在对 native API 进行自己的小扩展,但我无法获取我的 trigger 版本使用 disp
我有编写的代码: window.addEventListener("orientationchange", function() { //code here; }, false); 它工作正常
也许这是我的误解,但我认为当您创建一个自定义事件,然后创建“带有事件监听器的元素”(监听该事件)时,该事件(本身)会跟踪所有监听器谁在等待事件发生,并且当事件发生时,所有监听器都会自动收到通知。 但是
有没有办法调度所有元素? 例如,我们可以做 window.dispatchEvent(evt),但我想允许所有元素使用该事件。 (对于onclick,我们几乎可以使用所有元素) 最佳答案 var ev
我正在尝试为 WinJS 中的自定义事件编写事件处理程序。我不太确定这在 IE 中是如何工作的 -我正在创建一个自定义事件并发送它 - var eventObject = document.creat
如演示中所示,dispatchEvent 未按预期工作。 http://jsfiddle.net/DerekL/V8uEN/ 关键部分: btn.dispatchEvent( document
当我使用 dispatchEvent 模拟鼠标事件时,事件监听器的调用顺序与实际鼠标事件不同。特别是,某些bubble监听器会在同一目标上的capture监听器之前被调用。 这是一个 fiddle 来
如果我有一个无按钮表单,并且我想测试可能的 onsubmit 函数是否返回 true,然后提交它。这是我当前的代码,效果很好。 var form = document.getElementById('
通常我不会在 SO 中提出这种如此具体的问题,但我已经为这个问题苦苦挣扎了好几天,所以我在这里寻求一些帮助。 我正在构建一个应用程序来自动执行 Web 版 Whatsapp 中的任务 (https:/
在我的代码中我做了:element.onerror = my_function; 我想知道如何强制触发此事件以便我可以对其进行测试? 谁能告诉我如何使用 dispatchEvent 流程来做到这一点?
我正在尝试根据用户操作将字符发送到输入元素。 我正在尝试将 KeyboardEvent 与 dispatchEvent 一起使用,但无论我做什么,它都不起作用 例如: let keyEvent = n
我创建了一个事件,以便可以在事件发生时添加监听器。触发事件的场景会有所不同,因此需要跟踪触发事件的原因并进行适当的处理。但是,我尝试在循环内发生的函数中添加dispatchEvent,但收到 In
我有一个由特定函数触发的自定义事件。 此事件包含一个包含详细信息等的eventArgs。我希望处理程序/监听器能够更改 eventArgs,以便原始函数获得更改后的值。这可能吗? 到目前为止我已经尝试
我有以下代码 http://jsfiddle.net/yc7sj3pt/2/ document.getElementById('obj_one').addEventListener('mouseove
我在表单上有一个提交事件处理程序(以捕获使用 enter 提交表单的人,有时我需要手动触发(由用户点击提交按钮以外的其他内容触发) ,通过 dispatchEvent。 虽然我不希望它实际提交表单,但
当我在输入框上使用 dispatchEvent 触发 focus 事件时,它的 onfocus 被调用,但在 UI 上输入框是不专注。这种行为有什么原因吗? var test = document.g
我对下面的脚本感到困惑: var event = new Event('shazam'); document.body.addEventListener('shazam',function(){
我的要求是将事件从代码触发到父托管组件。 我在这里使用第一个答案作为引用:angular2 manually firing click event on particular element 如果我尝
我是一名优秀的程序员,十分优秀!