我有一个 PHP 脚本,它采用包含可变数量问题的文本列表,并生成如下所示的 HTML 表单代码。
What did you think of X?<br />
<input type="hidden" name="$survey[0][0]" value="What did you think of X?">
<input type="radio" name="$survey[0][1]" value="1">Didn't like it.
<input type="radio" name="$survey[0][1]" value="2">I was indifferent.
<input type="radio" name="$survey[0][1]" value="3">Liked it.
$survey[n][0]
是问题,$survey[n][1]
是答案,n
是问题的可变数量。
为了使用 Javascript 进行验证,我有一个循环遍历问题的循环,以及其中一个循环以确保每个问题都有答案。我的问题是引用名称中带有 []
的元素。这是我认为我的代码的相关部分。
var formElements = document.forms["form"].elements;
var groupCount = document.getElementsByTagName("li").length;
var groupNdx = 0;
var groupName = "";
var btnCount = 0;
while (groupNdx < groupCount) {
groupName = "'$survey[" + groupNdx + "][1]'";
btnCount = formElements[groupName].length;
最后一行不起作用,因为 formElements[groupName]
是“未定义”。
formElements['$survey[3][1]']
工作得很好,但是它硬编码了元素的名称,我需要为每个问题重复代码,更糟糕的是,它是一个 < i>问题数量不定。
当我打字时,类似问题侧边栏建议我阅读 Why aren't variable names converted to strings when using bracket notation in javascript? ,所以现在这就是 Javascript 中的情况。
但是您会建议什么解决方法呢?我可能会忘记使用 Javascript 进行验证,因为我还使用 PHP 验证表单,但我知道在客户端和服务器端验证表单是一个很好的做法。感谢您的帮助!
最佳答案
您有一组额外的单引号,不应在此处出现:
groupName = "'$survey[" + groupNdx + "][1]'";
这会在键本身中添加单引号。将其更改为:
groupName = "$survey[" + groupNdx + "][1]";
请注意,x["'key'"]
与 Javascript 中的 x['key']
不同。第一个有一个键 'key'
(包括引号),而第二个只有字符串:key
关于Javascript 和使用变量而不是括号表示法中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25143761/