Teacher: [0:01] With the intention to take away an occasion listener from an occasion goal, we use the removeEventListener() API. With the intention to as it should be take away an occasion listener, you wish to have to make use of the four uniquely figuring out attributes of an occasion listener that you just used together with your addEventListener() name. That’s the occasion goal, the development identify, the listener reference and the seize worth.
[0:25] In the case of the seize worth that you just supply to removeEventListener, it does now not subject the way you categorical the seize worth, simplest that it’s the similar worth that you just used with addEventListener. Sadly, the removeEventListener API provides no indication as as to if a removing used to be a success. In the event you mess anything else up, you will not learn about it.
[0:51] There are a couple of gotchas I have observed when making an attempt to take away occasion listeners with removeEventListener. In the beginning, you wish to have to go in the similar occasion listener connection with removeEventListener as you probably did to addEventListener so as to take away it.
[1:06] I have observed it arise a couple of occasions the place a serve as is equipped to removeEventListener that appears the similar because the one that you’ve got added with addEventListener. On the other hand, they are two other purposes with two other references.
(*16*) On this case, the removeEventListener name is not going to take away the unique onclick serve as. You can want to make certain that the similar reference is handed to removeEventListener as you equipped to addEventListener so as to effectively unbind the development listener.
[1:39] This gotcha appears to be extra not unusual when the usage of arrow purposes. Once more, I am offering a serve as that appears the similar to addEventListener and removeEventListener, however they’re other purposes with other references. Once I click on My Button, click on is being logged to the console as a result of my unique occasion handler isn’t being unbound.
(*14*) Right here, I’m lifting my arrow serve as up, assigning it to the onclick consistent, in order that I will go in the similar connection with addEventListener and removeEventListener. Now, after I click on the button, click on is not being logged to the console.
(*13*) In most cases talking, it is lovely bad to create purposes in the second one argument to addEventListener. It is because you lose get entry to to the serve as reference upon getting created it. Right here, I have known as addEventListener, and I haven’t any manner of having a connection with this serve as, so I will’t take away it as it should be.
[2:34] Right here, I am making a named onclick serve as in my 2d argument to addEventListener, however then after I move to name removeEventListener, I should not have a connection with that onclick serve as anymore. If I am within the onclick serve as, I will’t get get entry to to it so as to take away it.
[2:50] In most cases, I don’t create my occasion listener purposes within my addEventListener name. I will generally create it at some layer above in order that I will simply proportion it with the removeEventListener if I want to.
[3:03] Every other gotcha with the removeEventListener isn’t passing in the proper seize worth. Right here, I am including an occasion listener within the seize segment. Then, right here, I have forgotten to specify a seize worth, because of this it will use the default seize worth as false, so this is not going to unbind this addEventListener. Once I click on My Button, I will see that clicked is being logged out.
[3:26] This error is strangely simple to do when your addEventListener and removeEventListener calls don’t seem to be proper subsequent to one another. Chances are you’ll come alongside to an occasion listener and suppose, “Oh, this will have to be a seize occasion listener,” and so that you upload in a seize flag.
[3:39] You then disregard to replace your removeEventListener name, and now, your occasion listener will not be got rid of when you are expecting it to. This malicious program will also be tremendous arduous to stumble on, as removeEventListener provides no indication of whether or not the unbinding used to be a success.
[3:55] With the intention to keep away from the gotchas related to removeEventListener, I ceaselessly create this little helper. Right here, I’ve a serve as known as bind() that accepts an occasion goal and an object containing the development sort, our listener and choices. It then calls goal.addEventListener, offering within the sort, listener and choices.
[4:16] It then returns a serve as known as unbind(), which calls goal.removeEventListener, passing within the sort, listener and choices. The facility of this helper is, the four uniquely figuring out items of an occasion listener that you just use together with your addEventListener name are all the time used with an identical removeEventListener, making sure that you’re all the time as it should be unbinding an occasion listener.
(*5*) If we come again to my application, I will now import my bind helper. Right here, I am calling my bind helper, passing in my button occasion goal after which an object containing the development sort, the listener, which, on this case, is my onclick serve as, after which an choices object, the place I am surroundings seize to false.
(*4*) To unbind that occasion, all I want to do is name the unbind serve as, and I do know I am all the time going to wash that up correctly. If I click on on My Button, I will see that not anything’s being logged to the console.
(*3*) This little bind helper additionally unlocks more secure utilization of purposes outlined inside of your binding, for the reason that bind serve as helper has get entry to to that serve as, so it could actually as it should be go it into removeEventListener. Relatively than penning this little bind helper for each and every new challenge, I have finished it for you and created a bind-event-listener package deal on npm that you’ll be able to set up and use similar to this.
(*2*) My bind-event-listener package deal additionally has a bindAll variant that takes an occasion goal in addition to an array of bindings. It returns you again a unmarried serve as that, whilst you execute it, will unbind all of those occasion listeners in the similar move. Individually, I discovered it to be lovely helpful.