2012-08-07 46 views
0

所以我正在更新一個div的內容取決於用戶點擊的內容。有時我會顯示一張圖片,有時我會顯示文字:動態創建的div在jQuery中不可用?

var output; 
switch(type) 
{ 
    case IMAGE: 
     pages = null; 
     contentText = null; 
     upArrow = null; 
     downArrow = null; 

     var imageURL = "assets/images/" + items[itemIndex].imageURL; 
     output = '<img src="' + imageURL + '" class="fullImage" />'; 
     break; 

    case TEXT: 
     pageIndex = 0; 
     pages = items[itemIndex].copy.page; 
     numPages = pages.length; 
     lastPageIndex = numPages - 1; 

     output = '<div id="contentText" class="text"></div>'; 
     output += '<div id="textUpArrow" class="arrow upArrow"></div>'; 
     output += '<div id="textDownArrow" class="arrow downArrow"></div>'; 

     contentText = $("#contentText"); 

     textUpArrow = $("#textUpArrow"); 
     textUpArrow.bind(MOUSE_DOWN, onUpArrowClicked); 

     textDownArrow = $("#textDownArrow"); 
     textDownArrow.bind(MOUSE_DOWN, onDownArrowClicked); 

     setText(); 
     break; 
} 
content.html(output); 

問題似乎是關於範圍。我在我的JS文件的根級聲明瞭contentText,textUpArrow和textDownArrow(我不知道它是否被稱爲root,但它在每個函數之外,所以它可以全局使用)。

當我在控制檯輸出上述變量時,會發生什麼情況,什麼都沒有定義。但是,無論何時我嘗試使用這些變量,事件監聽器或通過jQuery更改其CSS,都不會發生任何事情。

我該看什麼?謝謝!

回答

1

您正在將一個事件綁定到div之前它已被添加到DOM。 這不起作用。

+0

是的!這就是它!我不認爲他們不會被引用,但由於jQuery針對DOM中的內容,這是有道理的!謝謝! – jansensan 2012-08-08 15:16:41

0

何時將輸出應用於文檔?

如果它在setText()中,則可能需要在完成輸出文本並在設置contentText之前調用該方法。

當您嘗試設置該變量時,該文檔中沒有帶該ID的div。

+0

我重新排序的功能的確元素尚未創建,並且固定我的問題。看來我指的是DOM之前的div。 – jansensan 2012-08-08 15:17:45

1

我想你會想用.on()而不是.bind()。從jQuery的.bind()文檔:

在jQuery 1.7的,所述.on()方法是事件處理程序的 附着於文檔的首選方法。對於早期版本,使用方法 .bind()直接將事件處理程序附加到 元素。處理程序附加到jQuery對象的當前選定元素 ,因此這些元素必須存在於發生調用 至.bind()的點。有關更靈活的事件綁定,請參閱.on().delegate()中關於事件委派的討論 。

+0

啊,我不知道這種方式,我會仔細研究一下,謝謝! – jansensan 2012-08-08 15:16:58

0

那是因爲你設置創建的元素contentTexttextUpArrowtextDownArrow之前。

output = '<div id="contentText" class="text"></div>'; 
output += '<div id="textUpArrow" class="arrow upArrow"></div>'; 
output += '<div id="textDownArrow" class="arrow downArrow"></div>'; 

contentText = $("#contentText"); 

這裏,contentText設置爲與元素的id #contentText的元素,但因此變得不確定