2012-04-06 75 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