简体   繁体   English

使用不带jQuery的JavaScript的下拉菜单选择

[英]Dropdown menu selection using JavaScript without jQuery

I am currently using Bootstrap 4 navbar and I have a dropdown with languages, when the dropdown menu option is selected, display it. 我当前正在使用Bootstrap 4导航栏,并且具有一个带有语言的下拉菜单,当选择了下拉菜单选项时,将其显示。

I did use jQuery but need to know how to do this without it. 我确实使用过jQuery,但需要知道如何在没有它的情况下执行此操作。

 $(".dropdown-menu a ").click(function() { $(this).parents(".dropdown").find('.btn').text($(this).text()); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> English <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#" data-value="english">EN</a></li> <li><a href="#" data-value="thai">TH</a></li> </ul> </div> 

You have to get the elements according to the class name and then add the event listener on that. 您必须根据类名称获取元素,然后在其上添加事件侦听器。

var divs = document.querySelectorAll('.dropdown-item');    
var myFunction = function() {
    alert('Click');
};
for (var i = 0; i < divs.length; i++) {
    divs[i].addEventListener('click', myFunction, false);
}

you can assign click listener to list item like below 您可以将点击监听器分配给如下所示的列表项

<div class="dropdown">
      <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
        English
        <span class="caret"></span>
      </button>
      <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
        <li><a href="#" data-value="english" onclick = "setLang('english')">EN</a></li>
        <li><a href="#" data-value="thai" onclick = "setLang('thai')">TH</a></li>
      </ul>
    </div>
<script>
function setLang(language){

    document.getElementById("dropdownMenu1").innerHTML = language;
}
</script>

Here is a try, but i would say that using jq is much simpler 这是一个尝试,但是我会说使用jq要简单得多

  document.querySelectorAll(".dropdown-menu a").forEach(a=>{ // Assign a click to each element a.addEventListener("click", function(){ // get the closest eg (parents) and then seacrh for the button // when you wrote text i assumed you ment innerhtml. a.closest(".dropdown").querySelectorAll(".btn")[0].innerHTML = a.innerHTML; }) }) 
 <div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> English <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#" data-value="english">EN</a></li> <li><a href="#" data-value="thai">TH</a></li> </ul> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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