首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery .off未与.on合作

jQuery .off未与.on合作
EN

Stack Overflow用户
提问于 2013-08-30 06:04:38
回答 3查看 93关注 0票数 0

我有一个jQuery accordion框,在每个链接的右边都有一个右箭头。当用户单击链接时,箭头变成向下箭头,内容展开。当用户点击同一链接时,箭头变成右箭头,并且内容被隐藏(典型的手风琴风格)。为了切换箭头,我使用了jQuery .on并切换掉了span元素上的一个类。当我尝试用.off删除事件时,一切都运行得很好。下面是我的脚本:

代码语言:javascript
复制
<script>
function handleClick(event) {
    $('#arrow').removeClass('icon-angle-right').addClass('icon-angle-down');
};

$('.panel-heading a').on('click', handleClick);
$('.panel-heading a').off('click', handleClick);
</script>

现在,什么都不能用。如果我删除.off行,那么span将切换类,但当再次单击时显然不会切换回来。

EN

回答 3

Stack Overflow用户

发布于 2013-08-30 06:11:10

通过取消绑定事件处理程序,您无法实现您想要的结果。因为您绑定了click处理程序,然后立即解除了它的绑定,这就是为什么如果您将该行放在里面就什么都不起作用的原因。每次更改类时都需要运行处理程序,处理程序修改DOM,在扩展和收缩accordion时都需要这样做。

toggleClass()将成功地完成您希望实现的目标。,因此删除off()行,并将您的函数切换为:

代码语言:javascript
复制
function handleClick(event) {
    $('#arrow').toggleClass('icon-angle-right').toggleClass('icon-angle-down');
};

另一个注意事项是,我将有一个默认状态,即该项目的箭头向右倾斜,然后是一个我要切换的open类,它将覆盖默认状态。这样你就只需要维护一个类了。但这是架构上的吹毛求疵。

票数 2
EN

Stack Overflow用户

发布于 2013-08-30 06:12:20

不确定为什么您要再次尝试删除处理程序。这样做不是更有意义吗:

代码语言:javascript
复制
<script>

$('.panel-heading a').on('click', function() {
     if ($(this).hassClass('icon-angle-right') {
          $(this).removeClass('icon-angle-right').addClass('icon-angle-down');
     } else {
          $(this).addClass('icon-angle-right').removeClass('icon-angle-down');
     }
});
</script>

还是我误解了这个问题?

票数 2
EN

Stack Overflow用户

发布于 2013-08-30 06:38:24

.on()绑定一个事件,.off()解除它的绑定。请参阅http://api.jquery.com/off/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18521704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档