2013-01-02 42 views
0

在下面給出的代碼中,我正在顯示在點擊它後在prettyphoto查看器中打開的圖像。麻煩使用jQuery的hide()函數?

<s:iterator value="allPhotos"> 
    <a href="#inline-<s:property value="pictureid"/>" rel="prettyPhoto" > 
     <img src="<s:property value="photourl"/>" alt=""> 
    </a> 
    <div id="inline-<s:property value="pictureid"/>" id="hiddenimgbox"> 
     <img src="<s:property value="photourl"/>" alt=""> 
     <div class="overlay"><s:property value ="title" /></div> 
    </div> 

    </s:iterator> 

這裏我面對的問題是我無法隱藏下面的div標籤,只能在瀏覽器中打開。

<div id="inline-<s:property value="pictureid"/>" id="hiddenimgbox"> 
    <img src="<s:property value="photourl"/>" alt=""> 
    <div class="overlay"><s:property value ="title" /></div> 
    </div> 

雖然我有以下腳本存在於文件的頭隱藏div

<script> 
    $("#hiddenimgbox").hide(); 
    </script> 

請指正......

回答

4

「元素」在<s:iterator>標籤內,因此實際上會包含多個元素。但是,在HTML頁面中,ID必須是唯一 - 只有一個元素應該具有特定的ID。

當您撥打$('#hiddenimgbox')時,它只會檢索一個這些元素,而不是所有元素。可以通過向其添加動態部分來使ID唯一,或者使用類來代替。

另外,如果你想要的元素默認爲被隱藏,這樣做在HTML中,不要使用JavaScript。這是不必要的,並且可能導致用戶在加載時立即看到頁面調整大小。

還有,我已經只注意到一個問題更多:你設置2個id屬性聲明元素時:

<div id="inline-<s:property value="pictureid"/>" id="hiddenimgbox"> 

第二個將可能只是被忽略,所以你永遠不會具有id等於hiddenimgbox的任何元素。在這種情況下,我肯定會建議你切換到hiddenimgbox每個元素是一個類:

<div id="inline-<s:property value="pictureid"/>" class="hiddenimgbox" style="display:none"> 

然後,而不是使用$('#hiddenimgbox')使用$('.hiddenimgbox')而是在必要的時候。

+0

你能幫我一些代碼嗎? – Ananda

+0

@bril正如我所說,使用HTML(特別是'style'屬性)在頁面加載時默認隱藏元素,而不是使用JavaScript。你不需要任何代碼,只要看看我答案的最後部分。 –

+0

感謝@anthony問題解決。並且非常感謝代碼審查,我遵循這一點。 – Ananda

0

你必須等待DOM是裝在訪問頁面上的元素之前,請使用:

<script> 
/* Wait until the DOM is ready */ 
$(function(){ 
    $("#hiddenimgbox").hide(); 
}); 
</script> 
0

您已經創建了兩次id屬性。所以瀏覽器將只接受第一個。像這樣改變它並嘗試。

<div id="inline-<s:property value="pictureid"/> hiddenimgbox">