Hey I’m having a little problem with my code it keeps putting up “The value passed to the element selector function (usually $w), must be of type string” whenever I click my Home and About button
I’m trying to build a mega menu
Here’s the second half
J.D
November 16, 2021, 9:48pm
2
In your code you’re treating the menuItems as if it was an array, but it’s actually just an object.
So either change it to be an array or change your script to handle an object.
How would I go about doing that I’m new to coding
const menuItems = {
Home : {
button : '#Home' ,
underline : '#HomeLine' ,
//contentBox: '#HomeBox'
},
Shop : {
button : '#Shop' ,
underline : '#ShopLine' ,
contentBox : '#ShopBox'
},
FAQ : {
button : '#FAQ' ,
underline : '#FAQLine' ,
//contentBox: '#kidsBox'
},
About : {
button : '#About' ,
underline : '#AboutLine' ,
//contentBox: '#kidsBox'
},
$w.onReady( function () {
initMegaMenu()
});
function initMegaMenu () {
for (let i in menuItems) {
$w(menuItems[i].button).onMouseIn(() => {
openRelevantPanel(menuItems[i]);
});
$w(menuItems[i].contentBox).onMouseOut(() => {
openRelevantPanel();
});
}
}
async function openRelevantPanel ( hoverItem ) {
for ( let i in menuItems) {
if (menuItems[i] === hoverItem) {
$w(menuItems[i].underline).show();
await $w(menuItems[i].contentBox).expand();
} else {
$w(menuItems[i].underline).hide();
$w(menuItems[i].contentBox).collapse();
}
}
}
J.D
November 16, 2021, 10:32pm
4
Do something like:
const menuItems = ['Home', 'About', 'Shop',/*etc..*/];
$w.onReady(() => {
menuItems.forEach(e => {
$w('#' +e).onMouseIn(event => {
$w(`#${e}Line`).show();
$w(`#${e}Box`).expand();
})
$w('#' +e).onMouseOut(event => {
$w(`#${e}Line`).hide();
$w(`#${e}Box`).collapse();
})
})
})
Ok thanks that part works. But now I’m trying to get it to open a #ShopBox with the shop button and #AboutBox with the about button.
And it keeps putting up flags.
Sorry I’m really bad with this stuff
J.D
November 16, 2021, 11:22pm
6
Check the property ID of the boxes. It should be case-sensitive. Make sure it’s spelled correctly.
ok so now how do I keep the box open when I hover over it and then close it when the mouse is off the box
And the box only shows up on the test page. I want it to show up on every page
I have the code set to the mastePage.js