2012-02-23 51 views
0

我想了解如何更好地編寫可以稱爲onload和onclick的更通用的方法。這是我迄今爲止完美的作品。onclick和onload之間的jquery共享方法

rushJustification($("#rush")); 

$("input#rush").click(function() { 
    rushJustification($(this)); 
}); 

function rushJustification(obj) { 
    var rushInput = obj.is(':checked'); 
    var rushContainer = $("#rush-justification-container"); 

    if(rushInput) { 
     rushContainer.slideDown(300); 
    } else { 
     rushContainer.hide(); 
    } 
} 

回答

4

而是複製click處理程序的內容,觸發它還有:

$("input#rush").click(function() { 
    rushJustification($(this)); 
}).click(); 

前面提到的方法可以有一定的副作用,當其他的腳本已經綁定的事件。在你的情況下,你可以使用下面的代碼:

rushJustification($("input#rush").click(function() { 
    rushJustification($(this)); 
})); 

它可能看起來很奇怪。由於jQuery的可鏈接性,此功能是可能的。 click方法返回相同的jQuery集合,即$('input#rush')。然後將其作爲參數傳遞給rushJustification函數。

+0

這種方法在使用ui-checkbox時似乎有一些意想不到的行爲。當複選框已保存時:選中,頁面未加載複選框並顯示rushContainer塊。 – 2012-02-23 16:00:33

+0

@George我不知道你在說什麼。你有多個綁定到'#rush'的'click'事件嗎? – 2012-02-23 16:21:06

+0

我看到發生了什麼,我的頁面上有一個由後端填充的複選框。如果屬實,我需要顯示一個文本框。每次加載頁面時,您的代碼都會觸發事件處理程序,這會顛倒複選框,而不是在沒有點擊的情況下調用rushJustification方法。這是我能夠得到代碼rushJustification()最乾淨的代碼。 $(「input#rush」)。click(rushJustification); – 2012-02-23 16:37:06