Reputation: 1
I'm trying to code toggle function but i can't think of it, my submenu can show and hide by clicking at Topics.
But i also want submenu to hide by clicking anywhere in webpage.
I'm very new to javacsript, i wish i could have some simple code or idea that easily for me to understand. If any one can give me some advices i would very appreciate it thank you.
(Just only javascript not Jquery)
var toggleMenu = (function () {
var mainTopics = document.getElementById("maintopics");
mainTopics.addEventListener("click", function (e) {
e.preventDefault();
mainTopics.classList.toggle("show");
});
return {
toggleMenu: toggleMenu()
}
})();
body {
margin: 0;
}
li, a{
text-decoration: none;
list-style-type: none;
text-decoration-line: none;
color: black;
}
/*main-menu*/
#mainmenu {
position: relative;
}
#mainmenu ul {
margin: 0;
padding: 0;
}
#mainmenu li {
display: inline-block;
}
#mainmenu a {
display: block;
width: 100px;
padding: 10px;
border: 1px solid;
text-align: center;
}
/*sub-topics*/
#subtopics {
position: absolute;
display: none;
margin-top: 10px;
width: 100%;
left: 0;
}
#maintopics.show #subtopics {
display: block;
}
#maintopics.hide #subtopics {
display: none;
}
#subtopics ul {
margin: 0;
padding: 0;
}
#subtopics li {
display: block;
}
#subTopics a {
text-align: left;
}
/*columns*/
#column1, #column2, #column3 {
position: relative;
float: left;
left: 125px;
margin: 0px 5px 0px 0px;
}
/*hover underline*/
#mainmenu li:hover {
text-decoration: underline;
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="index2.css" />
</head>
<body>
<div id="mainmenu">
<ul>
<li><a href="">Logo</a></li>
<li><a href="">Home</a></li>
<li id="maintopics"><a href="">Topics</a>
<div id="subtopics">
<div id="column1" class="columns">
<ul>
<li><a href="">Test1</a></li>
<li><a href="">Test2</a></li>
<li><a href="">Test3</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<script src="index2.js"></script>
</body>
</html>
Upvotes: 0
Views: 172
Reputation: 547
var toggleMenu = (function () {
var mainTopics = document.getElementById("maintopics");
mainTopics.addEventListener("click", function (e) {
e.preventDefault();
mainTopics.classList.toggle("show");
});
document.addEventListener("click", function (e) {
e.preventDefault();
mainTopics.classList.toggle("hide");
});
})();
body {
margin: 0;
}
li, a{
text-decoration: none;
list-style-type: none;
text-decoration-line: none;
color: black;
}
/*main-menu*/
#mainmenu {
position: relative;
}
#mainmenu ul {
margin: 0;
padding: 0;
}
#mainmenu li {
display: inline-block;
}
#mainmenu a {
display: block;
width: 100px;
padding: 10px;
border: 1px solid;
text-align: center;
}
/*sub-topics*/
#subtopics {
position: absolute;
display: none;
margin-top: 10px;
width: 100%;
left: 0;
}
#maintopics.show #subtopics {
display: block;
}
#maintopics.hide #subtopics {
display: none;
}
#subtopics ul {
margin: 0;
padding: 0;
}
#subtopics li {
display: block;
}
#subTopics a {
text-align: left;
}
/*columns*/
#column1, #column2, #column3 {
position: relative;
float: left;
left: 125px;
margin: 0px 5px 0px 0px;
}
/*hover underline*/
#mainmenu li:hover {
text-decoration: underline;
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" type="text/css" href="index2.css" />
</head>
<body>
<div id="mainmenu">
<ul>
<li><a href=''>Logo</a></li>
<li><a href=''>Home</a></li>
<li id="maintopics"><a href=''>Topics</a>
<div id="subtopics">
<div id="column1" class="columns">
<ul>
<li><a href="">Test1</a></li>
<li><a href="">Test2</a></li>
<li><a href="">Test3</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<script src="index2.js"></script>
</body>
</html>
Upvotes: 0
Reputation:
How about just using CSS?
body {
margin: 0;
}
li,
a {
text-decoration: none;
list-style-type: none;
text-decoration-line: none;
color: black;
}
/*main-menu*/
#mainmenu {
position: relative;
}
#mainmenu ul {
margin: 0;
padding: 0;
}
#mainmenu li {
display: inline-block;
}
#mainmenu a {
display: block;
width: 100px;
padding: 10px;
border: 1px solid;
text-align: center;
}
/*sub-topics*/
#subtopics {
position: absolute;
display: none;
/*margin-top: 10px;*/
top: 41px;
width: 100%;
/*left: 0;*/
}
#maintopics.show #subtopics {
display: block;
}
#subtopics ul {
margin: 0;
padding: 0;
}
#subtopics li {
display: block;
}
#subTopics a {
text-align: left;
}
/*columns*/
#column1,
#column2,
#column3 {
position: relative;
/*float: left;
left: 125px;*/
margin: 0px 5px 0px 0px;
}
/*hover underline*/
#mainmenu li:hover {
text-decoration: underline;
}
#mainmenu li:hover #subtopics {
display: block;
}
<body>
<div id="mainmenu">
<ul>
<li><a href="">Logo</a></li>
<li><a href="">Home</a></li>
<li id="maintopics"><a href="">Topics</a>
<div id="subtopics">
<div id="column1" class="columns">
<ul>
<li><a href="">Test1</a></li>
<li><a href="">Test2</a></li>
<li><a href="">Test3</a></li>
</ul>
</div>
</div>
</li>
</ul>
</div>
</body>
Upvotes: 1
Reputation: 896
1) Create a method say toggleHtml();
.
2) Put your logic in it.
3) call it from html body tag like below.
<body onClick="toggleHtml();">
Upvotes: 0