2013-01-06 84 views
1

這是我的第一篇文章,無論如何,我會直截了當地指出。表單文本字段變量在Javascript中顯示爲undefined

我有一個表單,當用戶寫入他們的名字時,Javascript將值保存到全局變量「ch_name」。當我通過網站上任何一點的警報訪問這個變量時,它總是顯示我輸入的正確值。但是,它只適用於警報,當我嘗試通過使用它始終顯示爲未定義的變量引用用戶。

我試過重新排序的代碼,如果它沒有正確加載,這還沒有產生任何結果。我開始想知道我是否正確引用它,因爲我還是JavaScript的新手。

正如你可能會發現我的代碼是一團糟,但這裏是我得到的。

var ch_name; //my global variable 

var data = new Array(); //I've taken a snippet out of an array of 8. 
data[0] = '<p>Question 1</p>' + ch_name + "\n" + //ch_name is referenced on this line. 
'<button onclick="results1()">Click Me</button>' + "\n" + 
'<button onclick="results2()">Click Me</button>' + "\n" + 
'<button onclick="results3()">Click Me</button>'; 

function charName(form) { //This is the code that changes the global variable ch_name. 
ch_name = document.nameform.user.value; 
ranData = Math.floor(Math.random() * data.length); 
document.getElementById("placeholder").innerHTML = data[ranData]; 
} 

HTML片段:

<form NAME="nameform" method="GET"> 
<p>Enter your character name:</p> <input type="text" name="user" value="" /> 
    <input type="button" value="Start" onClick="charName(this.form)"/> 
</form> 
<div id="placeholder"></div> 

通過警報引用的頻道 - 名稱的任何地方給了我正確的結果,在空白頁面加載,並且輸入的字符串後,給出了正確的名稱。但任何時候,我通過數組變量引用它,它顯示一個未定義的。這不是完整的代碼,但我確定在變量名稱等方面沒有衝突。我已經掃描了好幾次,我確信這只是我是一個白癡。

有沒有解決這個問題的方法?我現在已經準備好將整個代碼全部放在ch_name後面,以便專注於頁面的其他區域。

感謝您的閱讀和任何幫助。

+0

'document.nameform.user.value'這樣做的工作嗎?因爲名稱屬性被取消http://www.w3.org/TR/xhtml1/#C_8 – cjds

+0

不確定卡爾,我的朋友告訴我這也是問題,但我試圖找出解決方法。我不會說謊,我真的不明白你給我的鏈接。我事先做了一些關於表單的研究,這是人們使用的代碼,我必須出現一些非常舊的網頁。 – Darrell

+0

剛剛檢查過。它將用於表單,儘管將來可能會被刪除。不要嘗試訪問其他元素上的名稱。但是,代碼應該運行。 – cjds

回答

0

數據不會改變您的想法。

我認爲你最好的選擇是用功能代替data數組。

現在ch_name參數將在您每次運行該功能時動態創建。即每次按下按鈕時,這將更新數據。

如何更改頁面中的數據?

var ch_name; //my global variable 
function charName(form) { //This is the code that changes the global variable ch_name. 
    ch_name = document.nameform.user.value; 
    ranData = Math.floor(Math.random() * data.length); 
    document.getElementById("placeholder").innerHTML = getranData(ranData); 
} 

function getranData(num){ 
    if(num==0) 
      return '<p>Question 1</p>' + ch_name + "\n" + //ch_name is referenced on this line. 
      '<button onclick="results1()">Click Me</button>' + "\n" + 
      '<button onclick="results2()">Click Me</button>' + "\n" + 
      '<button onclick="results3()">Click Me</button>'; 
    else if (num==1) ; ///...and so on 
} 
+0

通過一個按鈕收集數據,我可能會在某個時候用img代替它,但現在按鈕可以正常工作。我有良好的感覺,這將起作用,我正在設置測試現在我會告訴你。 – Darrell

+0

這工作完全非常感謝這麼多的幫助:) – Darrell

1

我認爲你的問題是,爲您生成data數組時,ch_name不具有價值,所以它出來爲空白。即使更改ch_name,也不會使用正確的值重新生成data值。

解決此問題的方法可能是使用regenerate_data函數,該函數在您更改全局字符名稱時會重新生成數據data數組。

+0

我認爲這是問題,但我不能解決如何刷新它,我嘗試添加一個函數,只要我希望ch_name被引用,該函數重新獲得表單中的值並使用document.write命令,但現在它完全不顯示。你能否給我提供一些指導,以獲得可以工作的更新? – Darrell