1

这是我的第一篇文章,无论如何我会直奔主题。

我有一个表单,当用户输入他们的名字时,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 会给我正确的结果,页面加载时为空白,输入字符串后它会给出正确的名称。但是每当我通过数组变量引用它时,它都会显示一个未定义的。这不是完整的代码,但我确定变量名等没有冲突。我已经扫描了好几次,我确定这只是我是个白痴。

有解决办法吗?我已经准备好将整个代码完全放在 ch_name 后面,以专注于页面的其他区域。

感谢您的阅读和任何帮助。

4

2 回答 2

1

我认为您的问题是,当您的data数组生成时,ch_name没有值,所以它显示为空白。即使您更改ch_namedata也不会使用正确的值重新生成该值。

对此的解决方案可能是使用一个函数,该函数可以在您更改全局字符名称时regenerate_data重新生成数据数组。data

于 2013-01-06T17:50:44.017 回答
0

数据不会改变你的思维方式。

我认为对你来说最好的选择是data用函数替换 Array。

现在,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
}
于 2013-01-06T18:13:37.370 回答