简体   繁体   中英

Can't hide ul after clicking li element

After clicking on input I open <ul> list, need to close it on clicking <li> or in another place of screen

Here My JS & HTML

 $(".drop-down-input").click(function() { $(".dropdown-list").show(); }); // get "li" value and set to input $(function() { $(".dropdown-list li").on('click', function() { $idinput = $(".dropdown-list").siblings('input').attr('id'); $idinput = '#' + $idinput; $($idinput).val($(this).html()); $(".dropdown-list").hide(); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="styled-input-container drop-down-input"> <input id="simple_2" class="drop-down-select" placeholder="input text" type="text"> <ul class="dropdown-list"> <li>eeee</li> <li>xxxx</li> <li>xxxx</li> </ul> </div> 

$(".dropdown-list").hide(); - this is not working, I don't now why?

You need to bind the click event to the input element instead of the entire div otherwise event bubbling may happen. Although make it simple actually there is no need to get the id and select element again by the id value.

$(function() {
  $(".drop-down-input input").click(function() {
    $(".dropdown-list").show();
  });
  $(".dropdown-list li").on('click', function() {
    // if there is multiple `.dropdown-list` then get based on 
    // this context , eg : $(this).parent()
    $(".dropdown-list") 
      .hide() // hide the element
      .siblings('input') // get the sibling
      .val($(this).html()); // set it's value
  });
});

 $(function() { $(".drop-down-input input").click(function() { $(".dropdown-list").show(); }); $(".dropdown-list li").on('click', function() { $(".dropdown-list") .hide() .siblings('input') .val($(this).html()); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="styled-input-container drop-down-input"> <input id="simple_2" class="drop-down-select" placeholder="input text" type="text"> <ul class="dropdown-list"> <li>eeee</li> <li>xxxx</li> <li>xxxx</li> </ul> </div> 


Or use event.stopPropagation() to prevent event bubbling up.

$(function() {
  $(".drop-down-input").click(function() {
    $(".dropdown-list").show();
  });
  $(".dropdown-list li").on('click', function(e) {
    e.stopPropagation();
    $(".dropdown-list")
      .hide()
      .siblings()
      .val($(this).html());
  });
});

 $(function() { $(".drop-down-input").click(function() { $(".dropdown-list").show(); }); $(".dropdown-list li").on('click', function(e) { e.stopPropagation(); $(".dropdown-list") .hide() .siblings() .val($(this).html()); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="styled-input-container drop-down-input"> <input id="simple_2" class="drop-down-select" placeholder="input text" type="text"> <ul class="dropdown-list"> <li>eeee</li> <li>xxxx</li> <li>xxxx</li> </ul> </div> 

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