2012-10-09 36 views
1

我做了一些jQuery的東西與toggle(),我做了不同的動作,取決於當前div是關閉還是顯示,我知道我可以很容易檢查是否hasClass()is(':visible')爲我想做什麼,但我是思考也許有某種程度上我可以減少代碼量或只是做更有效率?比如用兩個函數來聲明toggle(),當它的顯示時它是這樣的,這是關閉的時候,這是可能的嗎?是否有任何申報toggle(),如果其開放做到這一點,關閉?

希望你明白我的意思嗎?

這樣或檢查jsfiddle

$('#click_me').on('click', function() { 
    $('#contain').toogle('blind', 300, function(){ 
     alert('open'); 
    }, function(){ 
     alert('close');   
    }); 
}); 
+1

不幸的是,'切換()'只支持一個回調。不過,您的策略是合理的:您可以檢查回調中的元素「(」:visible「)',並相應採取行動。 –

+0

由於您正在尋找一種方法來減少代碼量,您可以通過將此行爲抽象爲自定義[jQuery插件函數]來實現這一點(http://docs.jquery.com/Plugins/Authoring# Getting_Started),您可以重複使用。 – lanzz

+0

您正在混合切換效果方法和切換事件處理程序。 – undefined

回答

1

只需創建一個小的jQuery插件:

(function($){ 
    $.fn.myToggle = function(duration, cbShow, cbHide){ 
     this.each(function(){ 
      $(this).toggle(duration, $(this).is(":visible") ? cbHide : cbShow); 
     }); 
    }; 
})(jQuery); 

用法完全一樣,你在你的問題建議;我剛剛離開了寬鬆的方法...

Demo (JSFiddle)

2
var container = $('.container'); 
$('.button').click(function() { 
    container.toggle(function() { 
    alert(container.is(':visible') ? 'open': 'close'); 
    }); 
}); 
相關問題