【问题标题】:Form text field variable is showing undefined in Javascript表单文本字段变量在 Javascript 中显示未定义
【发布时间】:2013-01-06 17:39:06
【问题描述】:

这是我的第一篇文章,无论如何我会直截了当。

我有一个表单,当用户输入他们的姓名时,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 sn-p:

<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 后面,以专注于页面的其他区域。

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

【问题讨论】:

  • document.nameform.user.value 这行得通吗?因为 name 属性已被弃用 w3.org/TR/xhtml1/#C_8
  • 不确定 Carl,我的朋友告诉我这也是问题所在,但我正在尝试解决它。我不会撒谎,我真的不明白你给我的那个链接。我事先对表单做了一些研究,这是人们使用的代码,我一定翻出了一些非常古老的网页。
  • 刚刚检查过了。尽管将来可能会被删除,但它适用于表单。不要尝试访问其他元素上的名称。但是,是的,代码应该运行。
  • 快速提问。您知道当您将ch_name 添加到data[0] 时,data[0] 的值不会随着ch_name 的变化而变化吗?它仅在设置时采用 ch_name 的值,即 null
  • 这就是它似乎在做的事情,是的,我完全忘记了我试图将变量 data[0] 的值更改为某个 html + 另一个变量。我正在尝试像 Xymotech 建议的那样刷新它,但现在我没有得到任何未定义或任何东西。

标签: javascript arrays forms variables undefined


【解决方案1】:

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

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

【讨论】:

  • 我认为这是问题所在,但我不知道如何刷新它,我尝试添加一个函数,该函数在我希望引用 ch_name 时运行,该函数重新获得值从表单中并使用 document.write 命令,但现在它根本没有显示。您能否为我提供一些指导以进行有效的更新?
【解决方案2】:

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

我认为对你来说最好的选择是用函数替换 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
}

【讨论】:

  • 数据是通过按钮收集的,我可能会在某个时候将其替换为 img,但按钮现在可以正常工作。我觉得这会奏效,我正在设置它以进行测试,我会告诉你的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
  • 2023-04-03
  • 2013-09-13
  • 1970-01-01
相关资源
最近更新 更多