使用Vanilla JS收听jQuery事件
所以我试图确定是否可以使用vanilla JS来监听使用jQuery添加的事件。 我发现了这个问题:
在没有jQuery的情况下收听jQuery事件
这绝对是jQuery版本1的答案。 那么版本3怎么样?
我有一个小提琴,我已经放在一起测试,但我无法让第一个提交与任何版本的jQuery一起使用。 我错过了什么,或者jQuery 3中的事件模型仍然没有使用DOM事件模型?
https://jsfiddle.net/ydej5qer/1/
这是小提琴中的代码:
HTML:
This is div1. My event was added via jQuery and is listened for by vanilla JS.
Enter the number 2 to have the event fired.
This is div2. My event was added via vanilla JS and is listened for by jQuery.
Enter the number 2 to have the event fired.
JavaScript的:
var $input1 = $("#input1"); var $input2 = $("#input2"); var input1 = document.getElementById("input1"); var input2 = document.getElementById("input2"); var event1 = "civicscienceEvent1"; var event2 = "civicscienceEvent2"; $("#button1").click(function() { if (+$input1.val() == 2) { $input1.trigger(event1, {message: "Event 1 triggered!"}); } }); input1.addEventListener(event1, function(e) { console.log("Event 1 triggered! message=" + e.detail.message); }); $("#button2").click(function() { if (+$input2.val() == 2) { var event = new CustomEvent(event2, {detail: {message: "Event 2 triggered!"}}); input2.dispatchEvent(event); } }); $input2.on(event2, function(e) { console.log("Event 2 fired, but I don't know how to get the message!"); });
简短的回答是,这是不可能的,因为jQuery提供了一个超过vanilla JS的事件层。 这意味着vanilla JS无法与添加的层进行对话。
总而言之,jQuery可以捕获vanilla JS事件,但是vanilla JS无法捕获jQuery添加的事件。