简体   繁体   中英

How to detect a click on a list element?

I have this html code:

<div id="wordListDiv">
    <ul>
        <li id="word_0">bateau</li>
        <li id="word_1">braguette</li>
        <li id="word_2">bateau</li>
    </ul>
</div>

Then I have a javascript file:

document.addEventListener( 'click', mouseEventsListener);

function mouseEventsListener ( event ) {

    switch( event.target ) {

        case ***HOW_TO_DETECT_CLICK_ON_THE_LI_ELEMENTS***:

            myFunction( parameter );

        break;

    default:
        
        break;

    }

}

How can I execute myFunction from within the switch/case statement when the user clicks on a "li" element?

Check this code and as mention in above comment you can add more check as per your need

 document.addEventListener( 'click', mouseEventsListener); function mouseEventsListener ( event ) { switch( event.target.tagName ) { case 'LI': alert('Clicked LI') //myFunction( parameter ); break; default: break; } }
 <div id="wordListDiv"> <ul> <li id="word_0">bateau</li> <li id="word_1">braguette</li> <li id="word_2">bateau</li> </ul> </div>

To track click on every element, you need to add event listener in a loop

 let list = document.querySelectorAll( '#wordListDiv ul li' ); for ( var i = 0; i < list.length; i++ ) { list[i].addEventListener( 'click', (e) => { console.log( e.target.id ); }) }
 <div id="wordListDiv"> <ul> <li id="word_0">bateau</li> <li id="word_1">braguette</li> <li id="word_2">bateau</li> </ul> </div>

If you absolutely need the case syntax, use this:

 [...document.getElementsByTagName("li")].forEach(function(el) { console.log(el) el.addEventListener('click', mouseEventsListener); }) function mouseEventsListener(evt) { var index = whichChild(event.target) switch (index) { case 0: myFunction("1"); break; case 1: myFunction("2"); break; case 2: myFunction("3"); break; default: break; } } function myFunction(parameter) { console.log(parameter) } function whichChild(elem) { var i = 0; while (elem.previousElementSibling;= undefined) { ++i. elem = elem;previousElementSibling; }; return i; }
 <div id="wordListDiv"> <ul> <li id="word_0">bateau</li> <li id="word_1">braguette</li> <li id="word_2">bateau</li> </ul> </div>

Otherwise, I would recommend looking at the other solutions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM