2015-10-25 28 views
0

這似乎是一個重複的問題,並且在某種程度上它是,但我已經經歷了許多類似的問題,可悲的是,沒有一個符合我的需要。我真的很感激針對具體問題的建議。訪問函數中的變量以獲取不同的功能 - Javascript

我在這裏的JavaScript代碼中的主要問題是,我無法從函數ReadMoreLessText訪問函數TextLimiter中的變量RememberText20和RememberFullText中的值。 「消息」是ReadMoreLessText函數的一個參數,它基本上匹配上述變量中​​點擊正確值的元素,它們本身就是數組。我知道數組本身並沒有什麼問題,因爲它們保留了它們應有的值,因爲簡單的alert()證明了這一點。同樣,Message參數沒有問題,因爲ReadMoreLessText函數可以很好地處理其他值。

我的簡單問題是,我無法從ReadMoreLessText函數訪問上述變量中​​的值,儘管它們是全局變量,因爲它們應該是。

我真的很感激這裏的問題特定的答案。先謝謝你。

// JavaScript Document 
 

 
//Start Text250 
 

 
window.onload = function TextLimiter() { 
 
    for (y = 0; y < 6; y++) { 
 
    FullText = document.getElementsByClassName("Introduction")[y].innerHTML; 
 
    TextLength = FullText.length; 
 
    RememberFullText = []; 
 
    RememberFullText[y] = FullText; 
 
    var Text250 = FullText.substr(0, 250) + "..."; 
 
    RememberText250 = []; 
 
    RememberText250[y] = Text250; 
 
    if (TextLength > 250) { 
 
     document.getElementsByClassName("Read_More")[y].innerHTML = "Read More→"; 
 
     document.getElementsByClassName("Introduction")[y].innerHTML = Text250; 
 
    } else { 
 
     document.getElementsByClassName("Read_More")[y].innerHTML = ""; 
 
    } 
 
    } 
 
}; 
 

 
//End Text250 
 

 

 
//Start ReadMoreLessText 
 

 
var ReadMore = function(Message) { 
 
    var ScreenText = document.getElementsByClassName("Introduction")[Message].innerHTML; 
 
    if (ScreenText === RememberText250[Message]) { 
 
    document.getElementsByClassName("Introduction")[Message].innerHTML = RememberText250[Message]; 
 
    } else { 
 
    document.getElementsByClassName("Introduction")[Message].innerHTML = RememberText250[Message]; 
 
    } 
 
}; 
 

 
//End ReadMoreLessText

回答

0

嘗試定義RememberFullTextRememberText250以外的封閉for循環。

window.onload = function TextLimiter() { 
    RememberFullText = []; 
    RememberText250 = [] 
    for (y = 0; y < 6; y++) { 
     ... 

正如它們在循環的每次迭代中被設置爲空數組一樣。因此,在循環結束後,只有每個數組的最後一個條目纔會被保留。

+0

它們仍然不會被'ReadMore'函數看到,因爲它們的作用域爲'TextLimiter'。他們需要在'TextLimiter'函數的外側定義。 –

+0

我已經聲明瞭第一個函數內的變量,但在循環外,儘管數組是空的,但它工作正常。 「消息」參數保持不變 –

0

我沒有看到聲明爲全局的變量。你有一個var RememberText20, RememberFullText;以外的任何功能?

+0

@DanielFlint Javascript [自動生成全局屬性](http://stackoverflow.com/questions/5786851/define-global-variable-in-a-javascript-function)(瀏覽器中的'window')if an asignment是一個未定義的標識符。雖然我不建議這樣做,並且它在嚴格模式下不受ES6的支持,但我相信這解釋了爲什麼此代碼在這種情況下起作用。 – traktor53