2013-06-26 21 views
0

我使用Drupal並創建了三個浮動橫幅。jQuery中的替代getElementById()

在首頁有一個塊(block1)顯示一個浮動橫幅,刷新後第二個出現,第三個也顯示。 就像之前寫的這些橫幅有一個小X按鈕來停止溢出。 我把這個腳本放在其中一個橫幅上,效果很好。

<script language="javascript"> 
function doexpand() { 
    document.getElementById("block1").style.overflow = "visible"; 
} 

function dolittle() { 
    document.getElementById("block1").style.overflow = "hidden"; 
}  
</script> 

真正的問題是,在類別頁我有#block2和文章#block3。 這些塊顯示相同的橫幅。代碼僅用於一個ID。在這種情況下#block1。從其他主題閱讀時,document.getElementById不適用於更多ID。

我試圖用jQuery有兩個街區idents這樣的:

(function ($) { 

    function doexpand() { 
    $("#block1,#block2").css("overflow","visible"); 
    } 
    function dolittle() { 
    $("#block1,#block2").css("overflow","hidden"); 
    } 

    })(jQuery); 

它不工作。 螢火蟲/控制檯顯示:ReferenceError:doexpand未定義。

我試着用單塊也使用jQuery這樣的:

(function ($) { 

     function doexpand() { 
     $("#block1").css("overflow","visible"); 
     } 
     function dolittle() { 
     $("#block1").css("overflow","hidden"); 
     } 

     })(jQuery); 

而且它顯示了同樣的錯誤。

注:Drupal有不同的包裝,它是這樣的:

(function ($) { 
     //your existing code 
    })(jQuery); 
+4

您的代碼放在_closure_中,以便這些功能在其外部不可用。用jQuery添加你的事件。 – elclanrs

+0

你的最後一個問題被誤解了,但它與這個完全不同。你應該搶救另一個。 –

+0

dystroy這是一個真正的混亂,這就是爲什麼我打開一個新的,我投了其他線程被刪除。 – user2519032

回答

3

只要定義你的函數全局,或者你需要公開這些全球性的。

(function ($, window) { 

     function doexpand() { 
     $("#block1").css("overflow","visible"); 
     } 
     function dolittle() { 
     $("#block1").css("overflow","hidden"); 
     } 

     // expose them global 
     window.doexpand = doexpand; 
     window.dolittle = dolittle; 

})(jQuery, window); 
+0

是不是讓東西全球化是一個壞習慣?返回這些值並在窗口上下文中使用它們會不會更好? – raam86

+1

夥計,只需將動作偵聽器添加到橫幅 - 停止污染您的全局名稱空間和寶貴的HTML與函數,變量,JS調用和東西。 – Joshua