2013-01-23 50 views
-1

從jQuery 1.8開始,.toggle()實用程序函數已被棄用,並且我正在查看SO,無法使用快速片段來模擬其功能。我看了一個建議的解決方案here,但我覺得它太冗長了。用最小代碼模仿jQuery .toggle()?

我不知道我是否應該切換自定義類名並執行.on()/.off(),或者如果我應該跟蹤布爾值?

在我的腦海裏,我想我應該能夠做到這一切在一個單一的.on()事件地圖...

已經有人在這裏做之前並且可以共享一個片段?

編輯

我必須說,這是一個有點刺激性,當人們投下來的問題,以便積極。是的,一些類似的片段在SO上,但這裏的問題是關於最小化代碼。舊的jQuery .toggle()是一個不錯的簡單方法,我只是在尋找一些關於最佳方法的指針。

我想到的是:任何人都有想法如何避免使用全局變量來跟蹤我的點擊狀態?

g.toggler = 0; 
$(document).on({ 
    click : function(){ 
     g.toggler++; 
     if(g.toggler%2==1){ 
      console.log('forth'); 
     } else { 
      console.log('back'); 
     }; 
    } 
}); 
+0

取決於你想切換的。 –

+0

我會考慮類名突兀,喜歡'.data()'。上述範圍級別的布爾標誌具有更好的性能,但如果您有太多'.toggle',可能會失控。 –

+0

jQuery有一些其他切換****函數可用於某些事情,否則通常的方法是使用標誌。 – adeneo

回答

2

將切換值存儲在元素的數據對象中。

http://jsfiddle.net/HNxFx/

$(document).on({ 
    click:function(){ 
     var toggle = $(this).data("toggler", !$(this).data("toggler")).data("toggler"); 
     if(toggle){ 
      console.log('forth'); 
     } else { 
      console.log('back'); 
     }; 
    } 
}); 
+0

感謝您的答案。我並不擅長JavaScript的複雜性。我可以問什麼'!$(this).data(「toggler」))。data(「toggler」);'做什麼?我一直在努力應付那些在他們身上爆炸的表情。 – tim

+1

從裏到外看它。 '!$(this).data(「toggler」)'根據'$(this).data(「toggler」)'的當前值返回'true'或'false'。如果你用它的返回值替換那個部分(例如true),它將執行這個:'$(this).data(「toggler」,true)'使它等於它當前的相反。接下來,最後,我們正在執行'.data(「toggler」)'來獲得結果值。 –