2017-03-04 164 views
0

我想通过使用jQuery将选择转换为ul li,但由于某些原因它将无法正常工作。点击Worlds按钮时,将显示一个列表。每次有人从列表中选择一个项目时,会在项目上显示绿色叠加层(请参阅下图)。ul li的jQuery问题

以下是问题:当您多次选择项目时,绿色叠加显示在所有项目上,如下所示。它只应该显示一次点击每个项目,就好像我正在打开/关闭它。

预期的结果:http://jsfiddle.net/Starx/a6NJk/2/

实际结果:
enter image description here

$("#worldBtn").on("click", function() { 
 
    $('#displayWorlds').toggle(); 
 
}); 
 

 
var allOptions = $("#worlds-dropdown li"); 
 

 
$("ul").on("click", "li", function() { 
 
    console.log("clicked"); 
 
    allOptions.removeClass('selected'); 
 
    $(this).addClass('selected'); 
 
    $("ul").children('#displayWorlds').html($(this).html()); 
 
    allOptions.toggle(); 
 
}); 
 

 
$("#worldsClose").click(function (a) { 
 
    $('#displayWorlds').toggle(); 
 
    a.preventDefault(); 
 
});
.selected { 
 
background-color: rgba(16, 246, 136, 0.47); 
 
color: white; 
 
} 
 

 
li { 
 
padding: 8px 16px; 
 
border-radius: 6px; 
 
line-height: 1.429; 
 
-webkit-transition: .25s; 
 
transition: .25s; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button id="worldBtn" type="button" class="btn btn-purple">Worlds <i class="fa fa-globe"></i></button> 
 

 
<div class="bitblobs-panel bitblobs-side-panel bitblobs-worlds-panel" id="displayWorlds" style="display: none;"> 
 
<ul class="worlds-dropdown custom-scrollbar" id="worldsClose"> 
 
    <li onclick="setserver('server.localhost:551');"> 
 
     <div class="worlds-text">Option 1</div> 
 
    </li> 
 
    <li onclick="setserver('server.localhost:551');"> 
 
     <div class="worlds-text">Option 2</div> 
 
    </li>

+0

哪里是'displayWorlds'在您的HTML标记? – neophyte

+0

我不好,我忘了给HTML标记添加一行。请刷新 – AndroidGL

回答

1

简单的事实,您正在使用#worlds-dropdown li而不是.worlds-dropdown li

我也不知道你为什么需要allOptions.toggle(),因为这隐藏了li的东西。但我现在已经评论过了。如果这是您的功能,您可以取消注释。

$("#worldBtn").on("click", function() { 
 
    $('#displayWorlds').toggle(); 
 
}); 
 

 
var allOptions = $(".worlds-dropdown li"); 
 

 
$("ul").on("click", "li", function() { 
 
    console.log("clicked"); 
 
    allOptions.removeClass('selected'); 
 
    console.log(allOptions.length); 
 
    $(this).addClass('selected'); 
 
    $("ul").children('#displayWorlds').html($(this).html()); 
 
    //allOptions.toggle(); 
 
}); 
 

 
$("#worldsClose").click(function (a) { 
 
    $('#displayWorlds').toggle(); 
 
    a.preventDefault(); 
 
});
.selected { 
 
background-color: rgba(16, 246, 136, 0.47); 
 
color: white; 
 
} 
 

 
li { 
 
padding: 8px 16px; 
 
border-radius: 6px; 
 
line-height: 1.429; 
 
-webkit-transition: .25s; 
 
transition: .25s; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button id="worldBtn" type="button" class="btn btn-purple">Worlds <i class="fa fa-globe"></i></button> 
 

 
<div class="bitblobs-panel bitblobs-side-panel bitblobs-worlds-panel" id="displayWorlds" style="display: none;"> 
 
<ul class="worlds-dropdown custom-scrollbar" id="worldsClose"> 
 
    <li onclick="setserver('server.localhost:551');"> 
 
     <div class="worlds-text">Option 1</div> 
 
    </li> 
 
    <li onclick="setserver('server.localhost:551');"> 
 
     <div class="worlds-text">Option 2</div> 
 
    </li> 
 
</ul>

+0

这个答案解决了我的问题!更改#世界 - 下拉锂到。世界 - 下拉锂固定的问题。谢谢。 – AndroidGL

+0

简单的错误,无后顾之忧 –

0

试试这个jQuery代码以消除所有的世界,下拉列表里所有选中的类

$("ul").on("click", "li", function() { 

    $(".worlds-dropdown li").each(function(){ 
     $(this).removeClass('selected'); 
    }); 

}); 
+0

该代码没有工作.. – AndroidGL