JQuery toggle()方法替代问题

锋利的JQuery一书中对toggle方法的讲解停留在1.9版本以前,现在这个方法已经删除了切换绑定事件的用途,于是我想尝试一下几种不同的替代方法:

<style>
        div:nth-of-type(1){
            width: 200px;
            height: 200px;
            background-color: aqua;
            float: left;
            display: block;
        }
        div:nth-of-type(2){
            width: 200px;
            height: 200px;
            background-color: tomato;
            margin-left: 200px;
        }
    </style>
</head>
<body>
    <div id="show-box"></div>
    <div id="fade-box"></div>
    
    <script>
        $(function(){
            $("#show-box").click(function(){
                if($("#show-box").css("display")=="block"){//is(":hidden")
                    $(this).hide(300);
                }else{
                    $(this).show(300);
                }
            });
            var i = 0;
            $("#fade-box").click(function(){
                if(i == 0){
                    $(this).fadeOut(300);
                    i = 1;
                }else if(i == 1){
                    $(this).fadeIn(300);
                    i = 0;
                }
                console.log(i);
            })
        })

    </script>

两种方法都无法工作:都是只能消失而不能再次出现,想请问一下各位大佬是哪里出了问题...已经查阅了一些博文,用的也多是这两种方法...

阅读 2.4k
2 个回答
  1. 第一种方法里,.css()这个方法主要是针对行内样式的操作(执行存在不确定性),并且,display在非block值的情况下也可能是非隐藏的状态(另外多说一句,.show().hide()这对方法,会缓存display原来的值,所以就不会出现非block元素被block这样的事),所以不建议这样用
  2. 第二种方法思路可以,但DOM相关的变量(尤其是状态),建议你用data-xxxx这样的属性放在元素里,这样你事件回调里直接$(this).data('xxxx')就能取到属性,还可以避免变量冲突和作用域之类的问题。
  3. data相关的API查文档吧,比如>这里<这个就挺方便。锋利那本书太老了,个人不太推荐。

你的理解有点问题,消失了的话就点不了了,自然不会触发else后面的动作了

<style>
        div:nth-of-type(1){
            width: 200px;
            height: 200px;
            background-color: aqua;
            float: left;
            display: block;
        }
        div:nth-of-type(2){
            width: 200px;
            height: 200px;
            background-color: tomato;
            margin-left: 200px;
        }
    </style>
<button class="button1">切换1</button>
            <button class="button2">切换2</button>
            <div id="show-box"></div>
            <div id="fade-box"></div>
            
            <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
            <script>
                $(function(){
                    $(".button1").click(function(){
                        if($("#show-box").css("display")=="block"){//is(":hidden")
                            $("#show-box").hide(300);
                        }else{
                            $("#show-box").show(300);
                        }
                    });
                    var i = 0;
                    $(".button2").click(function(){
                        if(i == 0){
                            $("#fade-box").fadeOut(300);
                            i = 1;
                        }else if(i == 1){
                            $("#fade-box").fadeIn(300);
                            i = 0;
                        }
                        console.log(i);
                    })
                })
        
            </script>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题