简体   繁体   English

使用 Vanilla JS 监听 jQuery 事件

[英]Listen for jQuery Event With Vanilla JS

So I am trying to determine whether its possible to listen for events added with jQuery using vanilla JS.因此,我试图确定是否可以使用 vanilla JS 监听 jQuery 添加的事件。 I found this question:我发现了这个问题:

Listen to jQuery event without jQuery 在没有 jQuery 的情况下收听 jQuery 事件

which definitely answers it for version 1 of jQuery. How about version 3 however?这肯定回答了 jQuery 的版本 1。但是版本 3 呢?

I have a fiddle that I have put together to test out, but I am unable to get the 1st submit to work with any version of jQuery. Am I missing something, or is the event model in jQuery 3 still not using the DOM event model?我有一个我放在一起测试的小提琴,但我无法让第一次提交与 jQuery 的任何版本一起工作。我是否遗漏了什么,或者 jQuery 中的事件 model 3 仍然没有使用 DOM 事件 model ?

https://jsfiddle.net/ydej5qer/1/ https://jsfiddle.net/ydej5qer/1/

Here is the code in the fiddle:这是小提琴中的代码:

HTML: HTML:

<div id="div1">
<p>
This is div1. My event was added via jQuery and is listened for by vanilla JS.
</p>
<p>
  Enter the number 2 to have the event fired.
</p>
<input type="text" id="input1" />
<button id="button1">
Submit
</button>
</div>
<div id="div2">
  <p>
    This is div2. My event was added via vanilla JS and is listened for by jQuery.
  </p>
  <p>
    Enter the number 2 to have the event fired.
  </p>
  <input type="text" id="input2" />
  <button id="button2">
  Submit
  </button>
</div>

JavaScript: JavaScript:

var $input1 = $("#input1");
var $input2 = $("#input2");
var input1 = document.getElementById("input1");
var input2 = document.getElementById("input2");

var event1 = "event1";
var event2 = "event2";

$("#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!");
});

The short answer is that this is impossible as jQuery provides an event layer over vanilla JS.简短的回答是,这是不可能的,因为 jQuery 在 vanilla JS 上提供了一个事件层。 That means that vanilla JS cannot talk to that added layer.这意味着 vanilla JS 无法与添加的层对话。

So in summary, jQuery can catch vanilla JS events, but vanilla JS cannot catch jQuery added events.所以综上所述,jQuery 可以捕获 vanilla JS 事件,但 vanilla JS 无法捕获 jQuery 添加的事件。

This question is somewhat old, but it still ranks highly, so for anyone looking for a way to listen to jQuery events with vanilla JS: It is now possible with the aptly named jquery-events-to-dom-events library.这个问题有点老了,但它的排名仍然很高,所以对于任何想用普通 JS 收听 jQuery 事件的人来说:现在可以使用恰当命名的 jquery-events-to-dom-events库。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM