jquery函数赢得';无法在以前单击的div上运行

jquery函数赢得';无法在以前单击的div上运行,jquery,jquery-animate,scale,Jquery,Jquery Animate,Scale,这个问题涉及到。请看最新的 我已经能够让它工作,以便单击的div可以很好地缩放和设置动画。但我现在还有两个问题: 一旦单击的div缩小到原始大小,当我再次单击同一div以重复该操作时,脚本将不会运行 我对这种神经质的重新缩放/重新定位不太满意。我似乎无法使它工作得如此顺利。我想我会接受它,但如果它像最初的缩放/动画一样平滑,我会更高兴 如果我需要更清楚,请告诉我 任何帮助都将不胜感激!MTIA。它将不会再次工作,因为在使其不再为当前处理程序时,您将从中删除单击处理程序: selectedBox.

这个问题涉及到。请看最新的

我已经能够让它工作,以便单击的div可以很好地缩放和设置动画。但我现在还有两个问题:

  • 一旦单击的div缩小到原始大小,当我再次单击同一div以重复该操作时,脚本将不会运行

  • 我对这种神经质的重新缩放/重新定位不太满意。我似乎无法使它工作得如此顺利。我想我会接受它,但如果它像最初的缩放/动画一样平滑,我会更高兴

  • 如果我需要更清楚,请告诉我


    任何帮助都将不胜感激!MTIA。

    它将不会再次工作,因为在使其不再为当前处理程序时,您将从中删除
    单击
    处理程序:

    selectedBox.unbind('click');
    
    这将解除所有单击处理程序与div的绑定,包括最初在
    ready
    中连接的单击处理程序

    四种选择:

  • 不要解除主单击的绑定,对第二次单击事件使用jQuery的事件“名称空间”:

    $('.current').bind('click.current', function() {
    
    $('.current').click(currentClick);
    function currentClick() {
    
    …然后在解除绑定时:

    selectedBox.unbind('click.current');
    
    确保停止当前单击处理程序中的事件,这样主单击处理程序就不会运行(jQuery确保处理程序按照与连接相反的顺序运行,这样您就知道当前处理程序将在主处理程序跨浏览器之前运行)。没关系,抱歉,情况正好相反:jQuery确保它们按绑定顺序运行,而不是按相反顺序运行

  • 为当前单击事件使用命名函数:

    $('.current').bind('click.current', function() {
    
    $('.current').click(currentClick);
    function currentClick() {
    
    …并将其具体删除:

    selectedBox.unbind('click', currentClick);
    
    …同样,不要删除主处理程序

  • 使用而不是
    单击
    作为主(非当前)单击:

    这将钩住盒子容器上的
    click
    事件,而不是盒子本身,然后响应单击,因为它们会冒泡

    在“当前”单击处理程序中,确保取消单击事件,使其不会冒泡到容器中

    随着这一变化的实施。我还将“当前”单击命名为空格,以便对其他可能需要知道何时单击框的代码友好

  • 删除当前单击处理程序后,将
    框ClickHandler
    放回原处:

    selectedBox.unbind('click').click(boxClickHandler);
    
  • 根据框中是否显示“当前”类,在处理程序中使用单个处理程序和分支

  • …或上述各项的某种组合


    我最喜欢#5。

    我快速查看了一下,可能只需要修复序列,就像链接事件一样。 我点击了框,而它是动画,它收缩,然后收缩,一切都失败了


    除此之外,你的动画非常棒

    我知道你已经接受了Crowder先生的回答,但在玩了JFIDLE之后,似乎用.toggle()方法完成这一切的方法要简单得多

    更改类名后,不要向元素添加和删除单击事件,只需让同一元素在第二次单击时执行不同的操作即可。这真的可以帮你省下很多工作。这样开始的事情

    $(document).ready(function() {
        $('.box').toggle(click1,click2);
    });
    function click1(){
        $('.box').not(this).animate({left:2000},1000);
    }
    function click2(){
        $('.box').not(this).animate({left:0},1000);
    }
    

    谢谢,我必须添加取消绑定,因为我需要能够再次单击div来关闭/缩小它。我想我错了,也许最好是简单地添加一个id或交换类。天哪,这是一个很好的方法。我会给它一个关于你的问题,它不工作的第二次确定,但动画似乎非常顺利对我来说。也许只是你的浏览器和/或过载的资源?(cpu和ram)实时链接是问题的一个很好的附件,但也总是在问题中发布相关代码。有两个原因。1.人们不应该通过链接来帮助你。2.StackOverflow不仅是您现在的资源,也是其他将来有类似问题的人的资源。外部链接可以被移动、修改、删除等。通过确保问题中包含相关代码,我们可以确保问题(及其答案)在合理的时间内保持有用。公平点。直到昨天,我一直只在问题中发布代码,但我想也许人们更容易看到JSFIDLE!将来,我一定会两样都做。