2009-11-19 43 views
0

我的jQuery的4塊看起來像這樣:如何讓這個重複的jQuery不那麼如此?

$('#aSplashBtn1').click(function(){ 
    $('#divSliderContent div').hide(); 
    $('#divSplash1').fadeIn('slow'); 
    return false; 
}); 
$('#aSplashBtn2').click(function(){ 
    $('#divSliderContent div').hide(); 
    $('#divSplash2').fadeIn('slow'); 
    return false; 
}); 
$('#aSplashBtn3').click(function(){ 
    $('#divSliderContent div').hide(); 
    $('#divSplash3').fadeIn('slow'); 
    return false; 
}); 
$('#aSplashBtn4').click(function(){ 
    $('#divSliderContent div').hide(); 
    $('#divSplash4').fadeIn('slow'); 
    return false; 
}); 

我試着學習更多關於JavaScript數組和循環,但是當我嘗試落實到這個代碼只結束了對若干工作1塊。有人能告訴我他們將如何完成優化?

+1

這裏是#aSplashBtn4在realation到#divSplash4? – cobbal 2009-11-19 06:58:26

+1

不會只爲'(var i = 1; i <5; i ++)'工作嗎? – Lukman 2009-11-19 07:02:51

+0

你可以發佈你的標記的例子嗎? – CMS 2009-11-19 07:03:47

回答

2

的變化上Sosh's answer

$('#aSplashBtn1').click(hideAndFadeIn('#divSplash1')); 
$('#aSplashBtn2').click(hideAndFadeIn('#divSplash2')); 
$('#aSplashBtn3').click(hideAndFadeIn('#divSplash3')); 


function hideAndFadeIn(splash){ 
    return function() { 
     $('#divSliderContent div').hide(); 
     $(splash).fadeIn('slow'); 
     return false; 
    }; 
} 
+0

是的,這個更好 - 使用這個! :) – UpTheCreek 2009-11-19 07:25:06

+0

你不想也接受你的匿名函數的'e'參數並運行'e.preventDefault();'來防止頁面跳轉嗎? (我假設aSplashBtns是'a'標籤) – 2009-11-19 07:35:43

+0

好點,我只是把'return false;'儘管保持它相當於OP – cobbal 2009-11-19 07:39:24

0
var $divSlider = $("#divSliderContent div"); 
$('*[id^=aSplashBtn]').live('click', function(e){ 
    // Get the number from the id of the clicked element 
    var id = this.id.match(/^aSplashBtn(\d+)$/)[1]; 

    $divSlider.hide(); 

    $("#divSplash" + id).fadeIn('slow'); 

    // Preferred as opposed to return false 
    e.preventDefault(); 
}); 

這將設置一個單一的處理程序,將每一個元件都具有idaSplashBtn開始相匹配。您的身份證號碼可能會達到您想要的數量(即#aSpashBtn100),並且它仍然會與正確的div#divSplash100配對。

另外,我在自己的變量中緩存了#divSliderContent div,因爲您不希望jQuery在每次點擊時再次查找它。

1

如果點擊的內容是兄弟姐妹,你可以這樣做:

$('#aSplashBtn1').siblings().andSelf().click(function(e){ 
    $('#divSliderContent div').hide(); 
    $('#divSplash'+e.target.id.substr(e.target.id.length-1)).fadeIn('slow'); 
    e.preventDefault(); 
}); 
+0

這個''也可以代替'e.target' – 2009-11-19 07:51:03