Javascript 如何使用JQuery创建一个可选列表,其中列表项绑定到带有事件的按钮?

Javascript 如何使用JQuery创建一个可选列表,其中列表项绑定到带有事件的按钮?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我遇到了JQuery的一个问题 我想创建一个列表,通过点击一组按钮中的一个按钮来选择项目。基本上,我有3个灰色背景的按钮,每个按钮都有自己的id=“”属性,还有一个由3个列表项组成的无序列表,初始显示设置为“无”(它们也有自己的id) 我的目标是实现这一结果: 1) 当我单击3个按钮中的一个时,我所单击的按钮将以绿色背景色激活(为此,我使用.toggleClass()方法切换一个名为buttonListActive的类),相应的列表项将显示一个动画(为此,我使用.animate()方法) 2)

我遇到了JQuery的一个问题

我想创建一个列表,通过点击一组按钮中的一个按钮来选择项目。基本上,我有3个灰色背景的按钮,每个按钮都有自己的id=“”属性,还有一个由3个列表项组成的无序列表,初始显示设置为“无”(它们也有自己的id)

我的目标是实现这一结果:

1) 当我单击3个按钮中的一个时,我所单击的按钮将以绿色背景色激活(为此,我使用.toggleClass()方法切换一个名为buttonListActive的类),相应的列表项将显示一个动画(为此,我使用.animate()方法

2) 如果我点击同一个按钮(现在处于活动状态),之前出现的列表项会随着动画再次消失,按钮再次变为灰色(表示不再处于活动状态)

3) 如果我在另一个按钮处于活动状态时单击某个按钮,则活动按钮的列表项将消失,并变为灰色(因此不再处于活动状态),我单击的新按钮将变为活动状态,其列表项将显示动画

4) 如果我在显示的列表项内部或ul元素内部(蓝色背景)单击,则不会发生任何事情

5) 如果我在ul元素(包含显示的列表项)外单击,列表项应消失,其活动按钮应再次变为灰色(不再活动)

如果我重复我自己的话,我很抱歉,但我希望尽可能清楚,以便让您理解这一需要

这是我的密码:

 <!DOCTYPE HTML>
 <html lang="en">
 <head>
<meta http-equiv="Content-Type" content="text/html"/>
<meta charset="utf-8"/>
<title>Lists</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

        // button1 -> item1
        $(function() {
                $("#button1").click(function(e){
                        e.stopPropagation();
                        if ($("#item1").css("display") == "block") {
                                $("#item1").animate({ width: "0" }, 300, function() {
                                        $("#item1").css({ "display": "none"});
                                        $("#button1").toggleClass("buttonListActive");
                                });
                                return;
                        }

                        $(this).toggleClass("buttonListActive");
                        $("#item1").css("display", "block");
                        $("#item1").animate({ width: "500px"}, 300 );
                });

                // button2 -> item2
                $("#button2").click(function(e){
                        e.stopPropagation();
                        if ($("#item2").css("display") == "block") {
                                $("#item2").animate({ width: "0" }, 300, function() {
                                        $("#item2").css({ "display": "none"});
                                        $("#button2").toggleClass("buttonListActive");
                                });
                                return;
                        }

                        $(this).toggleClass("buttonListActive");
                        $("#item2").css("display", "block");
                        $("#item2").animate({ width: "500px"}, 300 );
                });

                // button3 -> item3
                $("#button3").click(function(e){
                        e.stopPropagation();
                        if ($("#item3").css("display") == "block") {
                                $("#item3").animate({ width: "0" }, 300, function() {
                                        $("#item3").css({ "display": "none"});
                                        $("#button3").toggleClass("buttonListActive");
                                });
                                return;
                        }

                        $(this).toggleClass("buttonListActive");
                        $("#item3").css("display", "block");
                        $("#item3").animate({ width: "500px"}, 300 );
                });

        });

        $(document).click(function(e){
                console.log($(e.target));
                    if ($.contains(document.getElementById("ListID"), e.target) || $(e.target).is("#ListID")) { return; }

                    $("#item1").animate({ width: "0" }, 300, function() {
                                        $("#item1").css({ "display": "none"});
                                        $(".buttonListActive").toggleClass("buttonListActive");
                                });

                    $("#item2").animate({ width: "0" }, 300, function() {
                                        $("#item2").css({ "display": "none"});

                                });

                    $("#item3").animate({ width: "0" }, 300, function() {
                                        $("#item3").css({ "display": "none"});

                                });

        });
</script>
<style type="text/css">
    body {
            font-family:Verdana, Arial, sans-serif;
            color:white;
            text-shadow: 1px 1px 2px rgba(0,0,0,0.4);
    }

    button {
            color:inherit;
            text-shadow: 1px 1px 2px rgba(0,0,0,0.4);
            border: 1px solid black;
            padding: 10px;
    }

    .buttonListActive {
            background:#44D574;
    }

    ul li {
            font-family:inherit;
            display:none;
            width:200px;
            height:20px;
    }

    #ListID {
            padding:10px;
            background:#006ED6;
            height:100px;
            width:800px;
    }

    ul li.listItem {
            background:#D61F2C;
            margin-top:10px;
    }
</style>
 </head>
 <body>
  <div class="buttons">
  <button id="button1" class="buttonList" name="button">Click to see list item1</button>
  <button id="button2" class="buttonList" name="button">Click to see list item2</button>
  <button id="button3" class="buttonList" name="button">Click to see list item3</button>
  </div>
  <ul id="ListID">
  <li id="item1" class="listItem">This is some button1 text</li>
  <li id="item2" class="listItem">This is some button2 text</li>
  <li id="item3" class="listItem">This is some button3 text</li>
     </ul>
 </body>
</html> 

列表
//按钮1->item1
$(函数(){
$(“#按钮1”)。单击(功能(e){
e、 停止传播();
if($(“#item1”).css(“显示”)=“块”){
$(“#item1”).animate({width:“0”},300,function(){
$(“#item1”).css({“display”:“none”});
$(“#button1”).toggleClass(“buttonListActive”);
});
返回;
}
$(this.toggleClass(“buttonListActive”);
$(“#item1”).css(“显示”、“块”);
$(“#item1”).animate({width:“500px”},300);
});
//按钮2->item2
$(“#按钮2”)。单击(功能(e){
e、 停止传播();
if($(“#item2”).css(“显示”)=“块”){
$(“#item2”).animate({width:“0”},300,function(){
$(“#item2”).css({“display”:“none”});
$(“#按钮2”).toggleClass(“按钮列表”);
});
返回;
}
$(this.toggleClass(“buttonListActive”);
$(“#item2”).css(“显示”、“块”);
$(“#item2”).animate({width:“500px”},300);
});
//按钮3->item3
$(“#按钮3”)。单击(功能(e){
e、 停止传播();
if($(“#item3”).css(“显示”)=“块”){
$(“#item3”).animate({width:“0”},300,function(){
$(“#item3”).css({“display”:“none”});
$(“#按钮3”).toggleClass(“按钮列表”);
});
返回;
}
$(this.toggleClass(“buttonListActive”);
$(“#item3”).css(“显示”、“块”);
$(“#item3”).animate({width:“500px”},300);
});
});
$(文档)。单击(函数(e){
log($(e.target));
if($.contains(document.getElementById(“ListID”),e.target)| |$(e.target).is(“#ListID”)){return;}
$(“#item1”).animate({width:“0”},300,function(){
$(“#item1”).css({“display”:“none”});
$(“.buttonListActive”).toggleClass(“buttonListActive”);
});
$(“#item2”).animate({width:“0”},300,function(){
$(“#item2”).css({“display”:“none”});
});
$(“#item3”).animate({width:“0”},300,function(){
$(“#item3”).css({“display”:“none”});
});
});
身体{
字体系列:Verdana、Arial、无衬线字体;
颜色:白色;
文本阴影:1px 1px 2px rgba(0,0,0.4);
}
钮扣{
颜色:继承;
文本阴影:1px 1px 2px rgba(0,0,0.4);
边框:1px纯黑;
填充:10px;
}
.ButtonListative{
背景#44D574;
}
ulli{
字体家族:继承;
显示:无;
宽度:200px;
高度:20px;
}
#李斯蒂德{
填充:10px;
背景#006ED6;
高度:100px;
宽度:800px;
}
ul li.列表项{
背景#D61F2C;
边缘顶部:10px;
}
单击以查看列表项1
单击以查看列表项2
单击以查看列表项3
  • 这是一些按钮文本
  • 这是一些按钮文本 这是一些按钮3文本<div class="buttons"> <button id="button1" class="buttonList" name="button" data-target="item1">Click to see list item1</button> <button id="button2" class="buttonList" name="button" data-target="item2">Click to see list item2</button> <button id="button3" class="buttonList" name="button" data-target="item3">Click to see list item3</button> </div> <ul id="ListID"> <li id="item1" class="listItem">This is some button1 text</li> <li id="item2" class="listItem">This is some button2 text</li> <li id="item3" class="listItem">This is some button3 text</li> </ul>
$(function () {
    $('.buttonList').on('click', function(e){
        e.stopPropagation();

        var target = $('#' + $(this).data('target'));
        if(target.css('display') == 'block') {

            target.animate({
                width: 0
            }, 500, function(){
                target.hide();
            });
            $(this).toggleClass('buttonListActive');
            return;
        } else {
            $('.listItem').hide().width(0);
            $('.buttonList').attr('class', 'buttonList');
        }
        $(this).toggleClass('buttonListActive');
        target.show().animate({width: "500px"}, 500);
    });
});