javascript - jq2 里没有toggle方法了,有什么好的替代吗
PHPz
PHPz 2017-04-11 11:43:13
[JavaScript讨论组]

jq2 里没有toggle方法了,有什么好的替代吗,还有事件解绑用哪个

PHPz
PHPz

学习是最好的投资!

全部回复(5)
PHP中文网

用hasClass/addClass/removeClass或attr标记状态实现toggle切换

<button id="animate" status="0">animate</button>
<p id="block">Hello World</p>

$("#animate").click(function(){
    if(!$(this).hasClass("clicked")) {
        $(this).addClass("clicked");
        $("#block").animate({"font-size": "10em"}, 1000, "linear", function(){console.log("complete");});
    } else {
        $(this).removeClass("clicked");
        $("#block").animate({"font-size": "1em"}, 1000, "linear", function(){console.log("complete");});
    }
});

$("#animate").click(function(){
    if($(this).attr("status") == 0) {
        $(this).attr("status", 1);
        $("#block").animate({"font-size": "10em"}, 1000, "linear", function(){console.log("complete");});
    } else {
        $(this).attr("status", 0);
        $("#block").animate({"font-size": "1em"}, 1000, "linear", function(){console.log("complete");});
    }
});
天蓬老师

官方没有说去掉 toggle()toggleClass() 啊,只说了在 3.0 中不再使用 .toggleClass( [state ] ) 这个签名(仅这个签名) 的函数。

toggle() 来说,主要是用于显示或隐藏,可以自己判断,调用 show() 或者 hide()

var $node = ...;

if ($node.is(":hidden")) {
    $node.show();
} else {
    $node.hide();
}
阿神

那就直接使用hide和show这两个就行了或者你自己实现一个toggle(用hide和show)用JQ的extend,绑定在JQ上

大家讲道理

官方要求用if。

PHP中文网

题主说的应该是jq1.9里移除的这个toggle(fn1,fn2[,fn3,...]),我觉得可以借鉴上面答主的思路,设置个标志位,然后在click事件处理里用if...else判断下就可以了。

至于事件解绑,一种是用one()绑定,这样事件触发一次之后可以自动解绑;还有一种是绑定时为事件加上命名空间,比如

$('#btn').on('click.test',function(){
    //todo...
});

这样就可以直接用

$('#btn').off('.test');

来解绑了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号