Hi I'm trying to run this piece of code in HubSpot but the mangler is breaking my script. Is there a better way I should be implementing the code?
function bindSpeakerImages(speakerImage) {
var speakerConatiner = speakerImage.parentNode;
console.log(speakerConatiner); // RETURNS OK
var speakerBio = speakerConatiner.querySelector('.speaker-description');
console.log(speakerBio);// BREAKING POINT
speakerImage.addEventListener('mouseenter', toggleSpeakerBio);
speakerBio.addEventListener('mouseenter', toggleSpeakerBio);
}
The SpeakerBio is returned null. But it works fine in my local environment prior to compression.
Uncaught TypeError: Cannot read property 'addEventListener' of null(…)
I used the same .querySelector method in this piece of code and it works fine.
function toggleSpeakerBio() {
var speakerConatiner = this.parentNode;
var speakerBio = speakerConatiner.querySelector('.speaker-description');
console.log(speakerBio) // Returns OK
toggleState(speakerBio, 'hidden', 'visible');
}
and if it is beneficial here is my entire script.
'use strict';
var speakerImages = document.querySelectorAll('.speaker-image');
var toggleState = function toggleState(elem, one, two) {
elem.setAttribute('data-state', elem.getAttribute('data-state') === one ? two : one);
};
function toggleSpeakerBio() {
var speakerConatiner = this.parentNode;
var speakerBio = speakerConatiner.querySelector('.speaker-description');
toggleState(speakerBio, 'hidden', 'visible');
}
function bindSpeakerImages(speakerImage) {
var speakerConatiner = speakerImage.parentNode;
console.log(speakerConatiner);
var speakerBio = speakerConatiner.querySelector('.speaker-description');
console.log(speakerBio);
speakerImage.addEventListener('mouseenter', toggleSpeakerBio);
speakerBio.addEventListener('mouseenter', toggleSpeakerBio);
speakerImage.addEventListener('mouseleave', toggleSpeakerBio);
speakerBio.addEventListener('mouseleave', toggleSpeakerBio);
}
for (var _i = 0; _i < speakerImages.length; _i++) {
bindSpeakerImages(speakerImages[_i]);
}
Here is the HTML
<div class="speaker-container">
<div class="speaker-image">
<img src="image.jpg"/>
</div>
<h4 class="speaker-name">name</h4>
<h5 class="speaker-title">title</h5>
<div class="speaker-description" data-state="hidden">
<p>This is speaker</p>
</div>
</div>