2010-02-22 70 views
0

我正在使用此函數爲基於Web的移動應用程序創建透明的當前div上的信息覆蓋圖。我必須複製此功能嗎? - jQuery

背景:使用jQTouch,所以我有單獨的div,而不是單個頁面加載新的。

$(document).ready(function() { 
    $('.infoBtn').click(function() { 
     $('#overlay').toggleFade(400); 
     return false;  
    }); 
}); 

應該理解的是JS會按順序運行,當我點擊第一個div功能工作正常的按鈕。當我進入下一個div時,如果我點擊相同的按鈕,當這個div顯示時什麼也不會「發生」,但是如果我回到第一個div,它實際上已經在這個頁面上觸發了它。

因此,我邏輯上覆制了該函數並更改了CSS選擇器名稱,它適用於兩者。

但是我必須爲每次使用做到這一點嗎?有沒有辦法使用相同的選擇器,但在每個變體中加載不同的內容?

回答

0

會是這樣的工作?我假設你想要的是不同的按鈕在不同的覆蓋div上調用toggleFade

function makeOverlayHandler(selector) { 
    return function() { 
     $(selector).toggleFade(400); 
     return false; 
    } 
} 

$('button selector').click(makeOverlayHandler('#overlay1')); 
$('another button selector').click(makeOverlayHandler('#overlay2')); 

你也可以改變makeOverlayHandlerselector參數到jQuery對象,而不是一個選擇,並調用它像這樣:makeOverlayHandler($('#overlay1'))

+0

這就是我想做的事情。我會看看這個,看看它的作品了。謝謝 – Josh 2010-02-22 21:26:30

0

您這樣做最好的辦法就是讓這一切相對,所以說,你有類似這樣的標記:

<div class="container"> 
    <div class="overlay">Overlay content</div> 
    <button class="infoBtn">Click to show overlay</button> 
</div> 

然後你可以找到覆蓋此按鈕realtively,就像這樣:

$(function() { //equivalent to $(document).ready(function() { 
    $('.infoBtn').click(function() { 
    $(this).closest('.container').find('.overlay').toggleFade(400); 
    return false; 
    }); 
}); 

您可以進一步優化,例如.children('.overlay')如果疊加始終是容器的直接子。這是從當前按鈕(this)開始,找到.container它使用.closest(),然後使用.find()找到其中的.overlay。通過這種方法,你有一個代碼小位來處理所有的綁定,更容易維護:)