EventTarget: меÑод removeEventListener()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
ÐеÑод removeEventListener() инÑеÑÑейÑа EventTarget ÑдалÑÐµÑ ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий, заÑегиÑÑÑиÑованного Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ EventTarget.addEventListener(). УдалÑемÑй ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий опÑеделÑеÑÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñией Ñипа ÑобÑÑиÑ, ÑÑнкÑией обÑабоÑÑика и дополниÑелÑнÑми паÑамеÑÑами, влиÑÑÑими на пÑоÑеÑÑ Ð¾Ð±ÑабоÑки.
ÐÑзов removeEventListener() Ñ Ð°ÑгÑменÑами, коÑоÑÑе не опÑеделÑÑÑ Ð·Ð°ÑегиÑÑÑиÑованного на EventTarget ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий, не Ð¸Ð¼ÐµÐµÑ ÑÑÑекÑа.
ÐÑли ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий ÑдалÑеÑÑÑ Ð² Ñо вÑемÑ, когда дÑÑгой ÑлÑÑаÑÐµÐ»Ñ Ð¾Ð±ÑабаÑÑÐ²Ð°ÐµÑ ÑобÑÑие, он не бÑÐ´ÐµÑ Ð²Ñзван. Ðднако его можно заÑегиÑÑÑиÑоваÑÑ Ð¿Ð¾Ð²ÑоÑно.
ÐÑедÑпÑеждение: ÐÑли ÑлÑÑаÑÐµÐ»Ñ Ð·Ð°ÑегиÑÑÑиÑован дваждÑ, Ñ Ñлагом capture и без него, Ñо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑдалÑÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлÑÑаÑÐµÐ»Ñ Ð¿Ð¾ оÑделÑноÑÑи. Удаление ÑлÑÑаÑÐµÐ»Ñ Ð·Ð°Ñ Ð²Ð°Ñа ÑобÑÑÐ¸Ñ Ð½Ðµ повлиÑÐµÑ Ð½Ð° ÑлÑÑаÑÐµÐ»Ñ Ð²ÑплÑÑÐ¸Ñ ÑÑого ÑобÑÑиÑ, и наобоÑоÑ.
СлÑÑаÑели ÑобÑÑий Ñакже можно ÑдалиÑÑ Ð¿ÐµÑедаÑей Ñигнала AbortSignal в addEventListener() и поÑледÑÑÑим вÑзовом abort() на конÑÑоллеÑе, владеÑÑем Ñигналом.
СинÑакÑиÑ
removeEventListener(type, listener)
removeEventListener(type, listener, options)
removeEventListener(type, listener, useCapture)
ÐаÑамеÑÑÑ
type-
СÑÑока, опиÑÑваÑÑÐ°Ñ Ñип ÑобÑÑиÑ, коÑоÑое нÑжно ÑдалиÑÑ.
listener-
ФÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑÑика ÑобÑÑÐ¸Ñ Ð´Ð»Ñ ÑдалениÑ.
optionsÐеобÑзаÑелÑнÑй-
ÐбÑÐµÐºÑ Ð½Ð°ÑÑÑоек, опиÑÑваÑÑий Ñ Ð°ÑакÑеÑиÑÑики обÑабоÑÑика ÑобÑÑиÑ:
capture: ÐогиÑеÑкое знаÑение, опÑеделÑÑÑее заÑегиÑÑÑиÑован ли ÑдалÑемÑй ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий на ÑÐ°Ð·Ñ Ð·Ð°Ñ Ð²Ð°Ñа или неÑ. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, Ñо пÑименÑеÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑfalse.
useCaptureÐеобÑзаÑелÑнÑй-
ÐогиÑеÑкое знаÑение, опÑеделÑÑÑее заÑегиÑÑÑиÑован ли ÑдалÑемÑй ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий на ÑÐ°Ð·Ñ Ð·Ð°Ñ Ð²Ð°Ñа или неÑ. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑÑен, Ñо пÑименÑеÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ
false.
ÐозвÑаÑаемое знаÑение
ÐеÑ.
ÐпÑеделение ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий Ð´Ð»Ñ ÑдалениÑ
Ðногда Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑÑ ÑдалиÑÑ Ð·Ð°ÑегиÑÑÑиÑованного Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ addEventListener() ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий.
ÐÑевидно, ÑÑо Ð´Ð»Ñ removeEventListener() нÑжно ÑказаÑÑ Ñе же паÑамеÑÑÑ type и listener. Ðо ÑÑо делаÑÑ Ñ Ð¿Ð°ÑамеÑÑами options или useCapture?
addEventListener() позволÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же ÑлÑÑаÑÐµÐ»Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñипа ÑобÑÑий более одного Ñаза еÑли оÑлиÑаÑÑÑÑ Ð½Ð°ÑÑÑойки. ÐÑи Ñдалении ÑлÑÑаÑÐµÐ»Ñ removeEventListener() пÑовеÑÑÐµÑ ÑолÑко Ñлаг capture/useCapture. Ðго знаÑение должно ÑовпаÑÑÑ, а дÑÑгие наÑÑÑойки не ÑÑиÑÑваÑÑÑÑ.
ÐапÑимеÑ, пÑедÑÑавим Ñакой вÑзов addEventListener():
element.addEventListener("mousedown", handleMouseDown, true);
ТепеÑÑ ÑаÑÑмоÑÑим каждÑй из двÑÑ
вÑзовов removeEventListener():
element.removeEventListener("mousedown", handleMouseDown, false); // Ðе ÑÑабоÑаеÑ
element.removeEventListener("mousedown", handleMouseDown, true); // ÐÑполниÑÑÑ ÑÑпеÑно
ÐеÑвÑй вÑзов не ÑÑабоÑÐ°ÐµÑ Ð¿Ð¾ÑомÑ, ÑÑо знаÑение useCapture не ÑовпадаеÑ. ÐÑоÑой вÑзов бÑÐ´ÐµÑ ÑÑпеÑен, поÑÐ¾Ð¼Ñ ÑÑо знаÑение useCapture ÑовпадаеÑ.
ТепеÑÑ ÑаÑÑмоÑÑим Ñакой ÑлÑÑай:
element.addEventListener("mousedown", handleMouseDown, { passive: true });
ÐдеÑÑ Ð¼Ñ Ð·Ð°Ð´Ð°Ñм обÑÐµÐºÑ options, в коÑоÑом знаÑение passive ÑÑÑановлено в true, а дÑÑгие наÑÑÑойки не ÑказанÑ, Ñо еÑÑÑ Ð±ÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ false.
ТепеÑÑ ÑаÑÑмоÑÑим вÑÐ·Ð¾Ð²Ñ removeEventListener() Ñ ÑазнÑми паÑамеÑÑами. Те из ниÑ
, в коÑоÑÑÑ
capture или useCapture ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² true, не ÑÑабоÑаÑÑ, оÑÑалÑнÑе вÑполнÑÑÑÑ ÑÑпеÑно.
ТолÑко наÑÑÑойка capture Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение пÑи вÑзове removeEventListener().
element.removeEventListener("mousedown", handleMouseDown, { passive: true }); // ÐÑполниÑÑÑ ÑÑпеÑно
element.removeEventListener("mousedown", handleMouseDown, { capture: false }); // ÐÑполниÑÑÑ ÑÑпеÑно
element.removeEventListener("mousedown", handleMouseDown, { capture: true }); // Ðе ÑÑабоÑаеÑ
element.removeEventListener("mousedown", handleMouseDown, { passive: false }); // ÐÑполниÑÑÑ ÑÑпеÑно
element.removeEventListener("mousedown", handleMouseDown, false); // ÐÑполниÑÑÑ ÑÑпеÑно
element.removeEventListener("mousedown", handleMouseDown, true); // Ðе ÑÑабоÑаеÑ
СÑÐ¾Ð¸Ñ Ð¾ÑмеÑиÑÑ, ÑÑо некоÑоÑÑе веÑÑии бÑаÑзеÑов ведÑÑ ÑÐµÐ±Ñ Ð¿ÑоÑивоÑеÑиво, поÑÑÐ¾Ð¼Ñ ÐµÑли Ð½ÐµÑ Ð¾ÑобÑÑ
пÑиÑин Ð´Ð»Ñ Ð¸Ð½Ð¾Ð³Ð¾, пÑи вÑзове removeEventListener() лÑÑÑе иÑполÑзоваÑÑ Ñе же паÑамеÑÑÑ, коÑоÑÑе иÑполÑзовалиÑÑ Ð´Ð»Ñ Ð²Ñзова addEventListener().
ÐÑимеÑ
Ð ÑÑом пÑимеÑе показано как можно добавиÑÑ ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий mouseover, коÑоÑÑй бÑÐ´ÐµÑ ÑдалÑÑÑ ÑлÑÑаÑÐµÐ»Ñ ÑобÑÑий click.
const body = document.querySelector("body");
const clickTarget = document.getElementById("click-target");
const mouseOverTarget = document.getElementById("mouse-over-target");
let toggle = false;
function makeBackgroundYellow() {
body.style.backgroundColor = toggle ? "white" : "yellow";
toggle = !toggle;
}
clickTarget.addEventListener("click", makeBackgroundYellow, false);
mouseOverTarget.addEventListener("mouseover", () => {
clickTarget.removeEventListener("click", makeBackgroundYellow, false);
});
СпеÑиÑикаÑии
| Specification |
|---|
| DOM > # ref-for-dom-eventtarget-removeeventlistenerâ¡ > |