onclick method ERROR

前端 未结 2 1144
慢半拍i
慢半拍i 2020-12-22 05:45

The following is the code am using to create on click method. I am getting an error when I click, nothing happens and I don\'t know what is wrong.



        
相关标签:
2条回答
  • 2020-12-22 06:23

    "Don't Repeat Yourself."

    You don't need 12 separate functions to cover every single element. This duplicates code and makes it harder to troubleshoot (as you saw), and harder to maintain. You'd have to add new functions for every new item category!

    Instead, you can add event listeners to each of the menu <li> tags in a loop. Here you can also give your <li> elements unique IDs or a class. In HTML5 you can add custom data- attributes as well.

    (function addEventListeners(){
        //Give the <ul> an ID instead of a class to target only those <li> elements.    
        var menuItems = document.getElementById("cbp-vimenu").getElementsByTagName("li");
        var len = menuItems.length;    
        for (var i=0; i < len; i++){
           menuItems[i].addEventListener("click", showMenu);
           menuItems[i].setAttribute("id", "menuItem" + i);
           menuItems[i].setAttribute("data-itemNum", i);  
        }
     })();
    

    Then create a single showMenu() function that compares the clicked <li> to the div you want to show. You could use a switch-case approach, or if the list and the divs are in the same order you can match them numerically (Ex: the 3rd menu item -> the 3rd sub-menu div). Either option really cuts down the code, which makes things less repetitive & easier to troubleshoot.

    Option 1, switch-case (JSFiddle):

    function showMenu(){
        hidemenus();
        var selectedItem = this.id;
        var divID;
    
        switch (selectedItem){
            case "menuItem1": 
                divID = "mobi"; 
                break;
            case "menuItem2": 
                divID = "elec";
                break;
    
            //add more cases here to account for other items
    
           default: return false;
        }
    
        document.getElementById(divID).style.display = "block";
    };
    

    Option 2, match list item and div position in array of matching elements (JSFiddle):

    function showMenu(){
        hidemenus();
        var itemNum = this.getAttribute("data-itemNum");
        var menuDivs = document.getElementsByClassName("answer_list");
        menuDivs[itemNum].style.display = "block";
    };
    

    Your hidemenus() function can be simplified by targeting the class="answer_list" attribute instead:

    function hidemenus() {
       var menusToHide =  document.getElementsByClassName("answer_list");
       var len = menusToHide.length; 
       for (var i = 0; i < len; i++){
            menusToHide[i].style.display = "none";
        }
    };
    

    BTW, you don't need to use nested <a> tags if all you're doing is changing CSS. You can put a click event listener on any element, and use CSS for the hand cursor to indicate that it's clickable.

    li:hover{
        cursor: pointer;
        cursor: hand; /*outdated cross-browser option, but no harm including it*/
    }
    

    Also, try to avoid inline CSS and inline JavaScript like onClick() - it can be much harder to maintain. As you can tell, it's hard to troubleshoot this code, and if you want to change its functionality, you'd need to edit 20+ locations in HTML vs maybe 2 in external JS.

    Ok, really last note - your HTML is missing some closing tags, </html>, a closing </p> tag in the "mobile" section, etc. Run it through an HTML validator.

    0 讨论(0)
  • 2020-12-22 06:35

    made some edits check this it will work now

    <!DOCTYPE html>
    <html lang="en" class="no-js">
    <head>
    <meta charset="UTF-8" />
    <title>Blueprint: Vertical Icon Menu</title>
    <link rel="shortcut icon" href="../favicon.ico">
    <link rel="stylesheet" type="text/css" href="css/leftmenu.css" />
    <link rel="stylesheet" type="text/css" href="flaticon.css" />
    <style>
        body {position: relative;font-family: 'Lato', Calibri, Arial, sans-serif;    color: #47a3da;}
        body, html { font-size: 100%; height: 100%; padding: 0; margin: 0;}
        a {text-decoration: none;}
        a:hover {color: #000;}
        #header{height:20%;width: 100%;background-color: #B9F5BB;}
        .dis123{width:75%;float:left; height:80%;text-align: left; }
        .postleftmen{width:25%;float:left;color:#f0f0f0;}
        div.subcte456{text-align: inherit;line-height: 150%;font-size:20px}
        div .subcte456 a{display:inline-block;padding:2px 6px;background-color:#47a3da;color:white;border-radius:4px;margin:3px;cursor:default;}
    </style>
    </head>
    <body>
    <div id="header">
        Head
    </div>
    <div class="postleftmen">
        <ul class="cbp-vimenu">
            <li><a href="#" class="flaticon-number41" >&nbsp;&nbsp;select category</a></li>
            <li><a href="#" class="flaticon-smart" onClick="mob();
                    return false;">&nbsp;mobile</a></li>
            <li><a href="#" class="flaticon-pc6" onClick="ele();
                    return false;">&nbsp;electronics&nbsp;&&nbsp;computer</a></li>
            <li><a href="#" class="flaticon-car95" onClick="veh();
                    return false;">&nbsp;vehicle</a></li>
            <li><a href="#" class="flaticon-livingroom6" onClick="hme();
                    return false;">&nbsp;home&nbsp;&&nbsp;furniture</a></li>
            <li><a href="#" class="flaticon-dog37" onClick="pet();
                    return false;">&nbsp;pets</a></li>
            <li><a href="#" class="flaticon-cd" onClick="bok();
                    return false;">&nbsp;&nbsp;books,&nbsp;cd&nbsp;&&nbsp;hobbies</a></li>
            <li><a href="#" class="flaticon-black276" onClick="clo();
                    return false;">&nbsp;clothing&nbsp;&&nbsp;accessories</a></li>
            <li><a href="#" class="flaticon-baby23" onClick="kid();
                    return false;">&nbsp;kids&nbsp;&&nbsp;baby</a></li>
            <li><a href="#" class="flaticon-bicycle14" onClick="spo();
                    return false;">&nbsp;sport&nbsp;&&nbsp;health</a></li>
            <li><a href="#" class="flaticon-tools6" onClick="ser();
                    return false;">&nbsp;service</a></li>
            <li><a href="#" class="flaticon-businessman221" onClick="job();
                    return false;">&nbsp;jobs</a></li>
            <li><a href="#" class="flaticon-house111" onClick="est();
                    return false;">&nbsp;real&nbsp;estate</a></li>
        </ul>
    </div>
    <div class="dis123" style="text-transform: uppercase;">
        <div class="stepindi" style="width:400px;height:10px;">
            <p class="flaticon-number40" style="font-size:25px;">&nbsp;&nbsp;SELECT YOUR FORM TYPE</p>
        </div>
        <div class="subcte456" style="font-size: 15px;position:fixed;width:55%;height:30%;margin-top: 30px;margin-left: 150px;">
            <div id="mobi" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Mobile&nbsp;Phones</a>
                <p class="flaticon-right127"><a href="#">Tablets</a></p>
                <p class="flaticon-right127"><a href="#">Mobile&nbsp;Accessories</a></p></div>
            <div id="elec" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Cameras&nbsp;&&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">TV&nbsp;-&nbsp;Video&nbsp;-&nbsp;Audio</a></p>
                <p class="flaticon-right127"><a href="#">Computers&nbsp;-&nbsp;Laptops</a></p>
                <p class="flaticon-right127"><a href="#">Computer&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">Video Games&nbsp;-&nbsp;Consoles</a></p>
                <p class="flaticon-right127"><a href="#">Others&nbsp;Electronics</a></p></div>
            <div id="vehi" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Cars</a></p>
                <p class="flaticon-right127"><a href="#">Motorcycles&nbsp;-&nbsp;Scooters</a></p>
                <p class="flaticon-right127"><a href="#">Bicycles</a></p>
                <p class="flaticon-right127"><a href="#">Commercial&nbsp;-&nbsp;Transportation</a></p>
                <p class="flaticon-right127"><a href="#">Spare Parts&nbsp;-&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">Tractors&nbsp;-&nbsp;Agricultural&nbsp;Equipments </a></p></div>
            <div id="home" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Furniture</a></p>
                <p class="flaticon-right127"><a href="#">Decor&nbsp;&&nbsp;Furnishings</a></p>
                <p class="flaticon-right127"><a href="#">Fridge&nbsp;-&nbsp;AC&nbsp;-&nbsp;Washing Machine</a></p>
                <p class="flaticon-right127"><a href="#">Home&nbsp;&&nbsp;Kitchen Appliances</a></p>
                <p class="flaticon-right127"><a href="#">Art&nbsp;-&nbsp;Paintings</a></p>
                <p class="flaticon-right127"><a href="#">Other&nbsp;Household&nbsp;Goods</a></p></div>
            <div id="pets" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Animals</a></p>
                <p class="flaticon-right127"><a href="#">Pet&nbsp;Food&nbsp;-&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">Pet Care & Services</a></p></div>
            <div id="book" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Books&nbsp;&&nbsp;Magazines</a></p>
                <p class="flaticon-right127"><a href="#">CDs&nbsp;-&nbsp;DVDs</a></p>
                <p class="flaticon-right127"><a href="#">Musical&nbsp;Instruments</a></p>
                <p class="flaticon-right127"><a href="#">Coins&nbsp;&&nbsp;Collectibles</a></p>
                <p class="flaticon-right127"><a href="#">Handicrafts</a></p></div>
            <div id="clot" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Clothes</a></p>
                <p class="flaticon-right127"><a href="#">Jewellery</a></p>
                <p class="flaticon-right127"><a href="#">Bags&nbsp;&&nbsp;Luggage</a></p>
                <p class="flaticon-right127"><a href="#">Footwear</a></p>
                <p class="flaticon-right127"><a href="#">Clothing&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">Watches</a></p></div>
            <div id="kids" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Baby&nbsp;Products&nbsp;&&nbsp;Furniture</a></p>
                <p class="flaticon-right127"><a href="#">Kids&nbsp;Clothing&nbsp;-&nbsp;Accessories</a></p>
                <p class="flaticon-right127"><a href="#">Toys&nbsp;&&nbsp;Games</a></p>
                <p class="flaticon-right127"><a href="#">Kids&nbsp;Health&nbsp;-&nbsp;Nutrition</a></p></div>
            <div id="spor" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Sport&nbsp;Equipment</a></p>
                <p class="flaticon-right127"><a href="#">Gym&nbsp;&&nbsp;Fitness</a></p>
                <p class="flaticon-right127"><a href="#">Health & Beauty</a></p></div>
            <div id="serv" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Education&nbsp;&&nbsp;Classes</a></p>
                <p class="flaticon-right127"><a href="#">Electronics&nbsp;-&nbsp;Computers</a></p>
                <p class="flaticon-right127"><a href="#">Maids&nbsp;&&nbsp;Domestic&nbsp;Help</a></p>
                <p class="flaticon-right127"><a href="#">Health&nbsp;&&nbsp;Beauty</a></p>
                <p class="flaticon-right127"><a href="#">Home&nbsp;Improvements&nbsp;&&nbsp;Repairs</a></p>
                <p class="flaticon-right127"><a href="#">Movers&nbsp;&&nbsp;Packers</a></p>
                <p class="flaticon-right127"><a href="#">Drivers&nbsp;-&nbsp;Taxi&nbsp;Services</a></p>
                <p class="flaticon-right127"><a href="#">Car&nbsp;Wash&nbsp;&&nbsp;Repair</a></p>
                <p class="flaticon-right127"><a href="#">Other&nbsp;Services</a></p></div>
            <div id="jobs" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Job&nbsp;Offers</a></p>
                <p class="flaticon-right127"><a href="#">Resumes</a></p></div>
            <div id="real" style="display:none;z-index:99;" class="answer_list" >
                <p class="flaticon-right127"><a href="#">Houses&nbsp;-&nbsp;Apartments&nbsp;for&nbsp;Sale</a></p>
                <p class="flaticon-right127"><a href="#">Houses&nbsp;-&nbsp;Apartments&nbsp;for&nbsp;Rent</a></p>
                <p class="flaticon-right127"><a href="#">Land&nbsp;-&nbsp;Plots&nbsp;For&nbsp;Sale</a></p>
                <p class="flaticon-right127"><a href="#">Office&nbsp;–&nbsp;Commercial&nbsp;Space</a></p>
                <p class="flaticon-right127"><a href="#">PG&nbsp;&&nbsp;Roommates</a></p>
                <p class="flaticon-right127"><a href="#">Vacation&nbsp;Rentals&nbsp;–&nbsp;Guest&nbsp;Houses</a></p></div>
        </div></div>
    <div style="clear:both"> </div>
    <script>
        function mob() {
            hidemenus();
            document.getElementById('mobi').style.display = "block";
        }
        function ele() {
            hidemenus();
            document.getElementById('elec').style.display = "block";
        }
        function veh() {
            hidemenus();
            document.getElementById('vehi').style.display = "block";
        }
        function hme() {
            hidemenus();
            document.getElementById('home').style.display = "block";
        }
        function pet() {
            hidemenus();
            document.getElementById('pets').style.display = "block";
        }
        function bok() {
            hidemenus();
            document.getElementById('book').style.display = "block";
        }
        function clo() {
            hidemenus();
            document.getElementById('clot').style.display = "block";
        }
        function kid() {
            hidemenus();
            document.getElementById('kids').style.display = "block";
        }
        function spo() {
            hidemenus();
            document.getElementById('spor').style.display = "block";
        }
        function ser() {
            hidemenus();
            document.getElementById('serv').style.display = "block";
        }
        function job() {
            hidemenus();
            document.getElementById('jobs').style.display = "block";
        }
        function est() {
            hidemenus();
            document.getElementById('real').style.display = "block";
        }
    
        function hidemenus() {
            document.getElementById('mobi').style.display = "none";
            document.getElementById('elec').style.display = "none";
            document.getElementById('vehi').style.display = "none";
            document.getElementById('home').style.display = "none";
            document.getElementById('pets').style.display = "none";
            document.getElementById('book').style.display = "none";
            document.getElementById('clot').style.display = "none";
            document.getElementById('kids').style.display = "none";
            document.getElementById('spor').style.display = "none";
            document.getElementById('serv').style.display = "none";
            document.getElementById('jobs').style.display = "none";
            document.getElementById('real').style.display = "none";
        }
    </script>
    

    javascript html

    0 讨论(0)
提交回复
热议问题