2010-07-27 34 views
1

我一遍又一遍地做這個,我不確定這是否是在JavaScript/jQuery中這樣做的最好方法。我有一個充當事件處理函數的函數,但我也需要在頁面初始化時調用它。因此,我一直在使用下面的代碼:jQuery函數用作事件處理程序和初始化

<script type="text/javascript"> 
    $(function() { 
     function doToggle() { 
      $("#toggle-fields").toggle(!$('#checkToggle').is(':checked')); 
     } 
     doToggle(); 

     $('#checkToggle').click(doToggle); 
    }); 
</script> 

你如何解決這種重複的情況?有什麼最佳實踐可以指引我?

+0

究竟是你的問題? – Sarfraz 2010-07-27 04:47:40

+0

我沒有看到任何重複。 – SLaks 2010-07-27 04:48:06

+0

對不起,我的剪切粘貼速度有點太快,我原來放的代碼實際上並不工作。雖然概念仍然相同。 – DavGarcia 2010-07-27 04:54:46

回答

2

一種方式來做到這一點是:)

$('#checkToggle').click(doToggle).click(); 
+0

請注意,這也會觸發其他處理程序。 – SLaks 2010-07-27 04:48:25

+0

@SLaks - 的確如此,但我從UI的角度來思考這個問題。將應用程序置於一個初始狀態,如果該元素被點擊(即所有附加的處理程序確實會運行),它將會在*中。 – Anurag 2010-07-27 04:51:22

+0

好主意。但是,如果他有非冪等的處理者,他應該意識到這一點。 – SLaks 2010-07-27 04:57:36

2

您的代碼將不起作用,因爲在第一次調用中this將爲window

將其更改爲

doToggle.call(document.getElementByID('checkToggle')); 
2

這樣的...

$(function() { 
    $('#checkToggle').bind('click.toggle',function(){ 
     $("#toggle-fields").toggle(!this.checked); 
    }).trigger('click.toggle'); 
});