2012-04-06 78 views
0

我对jQuery相当陌生,但看起来像是一件容易的事。同样的,我无法弄清楚。 我试图在两个动画函数之间切换,但是当函数2完成时,它继续并调用函数1。jQuery切换不断重复

function toggleThis(){ 
    $("#navSliderArrow").toggle(function() {  
     $(this).animate({ marginLeft: '235' }, 500); 
     $("#sliderArrow").attr("src", "images/hide_nav.gif"); 
    }, function() {  
     $(this).animate({ marginLeft: '0' }, 500); 
     $("#sliderArrow").attr("src", "images/show_nav.gif"); 
    }); 
} 

我在做什么错? 〜GYZ

+0

据我所知''.toggle'只有一个回调函数。不知道当你有2个这样的功能会发生什么..反正,你想在这里做什么? – 2012-04-06 21:07:09

+0

将此功能绑定到点击事件将虚拟点击按钮两次,一次用于点击,一次用于切换。这就是为什么你看到它滑向两个方向。 – 2012-04-06 22:15:35

+0

请包含您的相关HTML,以便我们可以更多地了解此功能的功能。 – Sparky 2012-04-09 15:57:46

回答

0

报价OP:

“我在做什么了?”

根据the jQuery documentation,您的语法错误。 toggle()内不能有两个回调函数。

.toggle([时间] [,缓和] [,回调])

  • 持续时间 - 一个字符串或数字决定动画将运行多久。
  • easing - 一个字符串,指示用于转换的缓动函数。
  • 回调 - 动画完成后调用的函数。

编辑:

阅读其他的答案后,我看到有another version of jQuery toggle() ...

http://api.jquery.com/toggle-event/

.toggle(处理器( eventObject),处理程序(eventObject)[,处理程序(eventObject)] )

  • 处理程序(eventObject)传递 - 要执行被点击的元件每一个偶数时间的函数。
  • handler(eventObject) - 单击元素时每执行一次奇数时间执行的函数。
  • 处理程序(事件对象) - 其他处理程序在点击后循环。

执行得当,你的jQuery应该像这个...

$(document).ready(function() { 
    $("#navSliderArrow").toggle(
     function() {  
      $(this).animate({ marginLeft: '235' }, 500); 
      $("#sliderArrow").attr("src", "images/hide_nav.gif"); 
     }, 
     function() {  
      $(this).animate({ marginLeft: '0' }, 500); 
      $("#sliderArrow").attr("src", "images/show_nav.gif"); 
     } 
    ); 
}); 

并与jQuery的,也绝对不需要任何内嵌JavaScript<a href="#" onclick="togglethis()">。你的HTML应该看起来像类似 ...

<a href="#" id="navSliderArrow"> 

我只能说“像”,既然你的HTML不包含在你的OP,我不知道你的目标元素应该是。

jsFiddle DEMO

+0

奇怪的是,我从另一个网站得到了这个语法,提示它是如何在两个函数之间切换的。 但是我想要做的是,有一个div在第一次点击时移动到右侧235px,然后在下一次点击和广告nauseum时回到0px。 似乎很漂亮的初学者的东西,但是,那就是我。 – gyzhor 2012-04-06 21:18:46

+0

哎呀,我想我应该在最后一篇文章中加入@Sparky672。 – gyzhor 2012-04-06 22:02:30

+0

@gyzhor,在回答用户自己的回答或问题时,不需要'@ user'。另请参阅我编辑的答案,并在原始问题中包含更多HTML。 – Sparky 2012-04-09 15:36:30

1

从我的意见的前面,

据我所知,.toggle只有一个回调函数。不知道 当你有2个功能时发生了什么..反正,你试图在这里存档的是什么 ?

更多.toggle API doc

我假设你正在试图显示和隐藏的#sliderArrowonclick。如果是这样那么试试下面,

$(function() { 
     var $slideArrow = $("#sliderArrow"); 
     var $navSlideArrow = $('#navSliderArrow'); 
     $slideArrow.on ('click', function() {    
      if ($slideArrow.attr('src').indexOf('show') >= 0) { 
       $navSlideArrow.animate({ marginLeft: '235' }, 500); 
       $slideArrow.attr("src", "images/hide_nav.gif"); 
      } else { 
       $navSlideArrow.animate({ marginLeft: '0' }, 500); 
       $slideArrow.attr("src", "images/show_nav.gif"); 
      } 
     }); 
    }); 
+0

不,这似乎有同样的问题,只有而不是重复自己只有一次,它重复一次,每次点击(没有第一次点击,第二次点击,第三次点击两次等)。也许现在忽略图像交换 - 我想要做的就是使用相同的可点击div将其位置移动到第一次点击的左侧,然后在第二次点击右侧。 – gyzhor 2012-04-06 21:55:18

+0

有趣的是,如果你抛出一个不存在的函数,像$(this).harumph();那么我的原始代码工作正常。打破功能。太糟糕了,它引发了一个错误。 – gyzhor 2012-04-06 21:56:31

0

还有.toggle的事件处理程序的版本() - http://api.jquery.com/toggle-event/

拨动事件处理程序结合的Click方法本身,所以你只需要直接执行动画:

$("#navSliderArrow").toggle(
    function() {  
     $(this).animate({ marginLeft: '235' }, 500); 
     $("#sliderArrow").attr("src", "images/hide_nav.gif"); 
    }, 
    function() {  
     $(this).animate({ marginLeft: '0' }, 500); 
     $("#sliderArrow").attr("src", "images/show_nav.gif"); 
    } 
); 
+0

请参阅[jsFiddle]上的示例(http://jsfiddle.net/styson/SEjya/) – 2012-04-06 22:13:33

+0

因此,除了togglethis()函数之外,这与本来的内容基本相同。当我把它放在原始函数之外时,我似乎没有获得任何功能。 – gyzhor 2012-04-06 22:27:13

+0

您是否将原始函数绑定到单击事件?你能发布更多的代码吗? – 2012-04-06 22:29:04