I’m trying to have the initial state of a dropdown set to open. I was able to get the desired behaviour by setting an initial state on the menu itself to display: block; however that created a problem where a user would be required to click twice on the dropdown to close it the first time around.
So my second line of thought was to simulate a click on the dropdown toggle itself but that doesn’t seem to work either. Here’s the code I’ve been using:
<script>
$(document).ready(function() {
// Tried this hoping to bypass jQuery to make sure the element would receive the event
document.getElementById('product-details').click();
// Tried these 2 as well using jQuery
$('#product-details').trigger('click');
$('#product-details').click();
// Tried to fire the click on the text block inside the dropdown hoping it would bubble through.
$('.text-block-11').click();
};
</script>
Any other hacks to make this happen? I thought maybe setting a class to open on the dropdown using the first method?
Figured I’d check in here see if anyone ever came up with a good solution before I spend more time hacking at this.
Found a solution. It’s not exactly pretty but it works. Seems like the dropdown component doesn’t care about the click event and relies instead on the mouse up / mouse down events:
<script>
var dropdown = document.querySelector('.dropdown-toggle');
triggerMouseEvent(dropdown, 'mousedown');
triggerMouseEvent(dropdown, 'mouseup');
function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent(eventType, true, true);
node.dispatchEvent(clickEvent);
}
</script>
I have attempted to convert this to JQuery using the node.trigger(‘mousedown’) followed by node.trigger(‘mouseup’) methods on the node as well as node.mousedown() followed by node.mouseup() and it didn’t work. So the vanilla Javascript code up there is the only way to accomplish that as far as I can tell.
Insert in the ‘Before </body> tag’ part in your page settings and enjoy
mmh interesting, it seems webflow doesn’t use <select> markup for its dropdowns but <div> instead. I see that when a “dropdown” is open, it has a webflow class of “w–open”. You might want to programmatically do this like so:
I’ve been trying to implement your original solution on my site but nothing seems to work. I have renamed classes and placed code in the before tag. Have there been any changes to the dropdown implementation that may have made the code obsolete? Just want all of my dropdowns to be open when the page is loaded so the content populates the space.
Hey Anthony, is it possible to set the initial state of a dropdown element to open? Other than it should behave as usual. Trying to build an accordion with the webflow dropdown elements, first one should be open initially.
You need to replace .dropdown-toggle with the class name of the toggle element. If you want to use the element ID instead you can replace the . to a #.
You will also need to put these in between <script> ... </script> tags on the custom code box
I have tired $('.dropdown-toggle').trigger('tap'); but it only seems to work on Inspector mode, tablet and mobile views. Does any one know why that’s happening or a way around this to get it working on Desktop?
Thanks for your contribution about this topic. Hower I’m having a similar issue that I can not solve. I’m having this design where the first dropdown is open and displays the active FAQ item. Do you guys know a way to initial open the dropdown on load with a collection list in it?