JavaScript 无法调用数组中的元素

javascript cannot call an element in array

提问人:netrox 提问时间:12/23/2008 最后编辑:netrox 更新时间:12/24/2008 访问量:1242

问:

好的,让我解释更多......目标是在选择时发生更改时选中该复选框。实际代码为:

function checkit(date)
{
  document.forms[0].date.checked = true;
}


<input type="checkbox" name="date[]" value="2008-08-14">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

  <input type="checkbox" name="date[]" value="2008-08-15">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

<input type="checkbox" name="date[]" value="2008-08-16">Aug 14, 2008<br> 
 <select name="slot[]" size="1" onchange="checkit(date[]);"/>
 <option value="2008-08-15;0900;1700">9am to 5pm</option>       
 <option value="2008-08-15;1330;1730">1:30pm to 5:30pm</option>
 </select>

在 PHP 中,如果它看到一个带有 [ ] 的变量,它会自动创建一个数组。在 Javascript 中,我希望 Javascript 能够识别 [] 并基于当前元素执行。例如,如果我在第二个复选框中选择一个值,它应该触发一个事件来选中该元素框。我不想将变量命名为 date1、date2、date3、date4......我希望这能澄清更多。我知道我错过了什么......我尝试了“this”关键字使其成为“this current element”,但它似乎不起作用,但可能是我使用了不正确的语法。

我所期望的是 onchange 事件,它应该触发它的参数,即“date[]”,但我认为 Javascript 应该知道它将使用 date[] 中的哪个元素,而不是显式地称其为 date[1] 等等。checkit 函数获取“date[]”名称并选中该 date[] 复选框。

顺便说一句,非常感谢您的补充答案(我学到了一些新东西!

JavaScript 数组

评论

0赞 Johannes Schaub - litb 12/23/2008
应该有人告诉新发帖人代码格式功能。我在问题文本中看到<pre>很多次......
0赞 Vinko Vrsalovic 12/23/2008
pre 基本上没问题......谁在乎小片段的 higlighting?我没有。
0赞 some 12/23/2008
@Vinko Vrsalovic:在这种情况下,很明显原始海报的标记无效(忘记关闭更改的引号)

答:

1赞 Andreas Grech 12/23/2008 #1

你到底想用这段代码做什么?

根据你的代码段(有一些语法错误),你正在选中一个复选框,然后调用一个js函数,该函数将再次选中该复选框...?

你到底想达到什么目的?

试试这个代码:

function checkit(date)
   {
    var date = document.getElementById(date);
    date.checked = true;
   }
<input type="checkbox" id="date[1]" value="2008-08-14" onchange="checkit('date[1]')");/>Aug 14, 2008<br /> 
<input type="checkbox" id="date[2]" value="2008-08-14" onchange="checkit('date[2]')");/>Aug 14, 2008<br /> 
<input type="checkbox" id="date[3]" value="2008-08-14" onchange="checkit('date[3]')");/>Aug 14, 2008<br /> 
2赞 some 12/23/2008 #2

它不起作用,因为(正如 dreas 所说)您的 HTML 代码有错误,并且您以与 javascript 语法冲突的方式命名变量。

输入的名称是 date[1][] 在 javascript 代码中具有特殊含义。

在此代码中:

document.forms[0].date.checked = true;

您尝试访问文档第一个表单 (document.forms[0]),然后尝试访问名为“日期”的字段,但没有任何字段。根据您的 HTML 标记,您有名为“date[1]”、“date[2]”和“date[3]”的字段。

但是你不能像这样访问它们:

document.forms[0].date[1].checked = true;

为什么?因为 date[1] 尝试用 1 索引日期,在这种情况下,你的日期不是一个数组。

如果你用引号括起来,你可以访问它:

document.forms[0]["date[1]"].checked = true;

请注意,现在“date[1]”用作字符串。

0赞 Jason S 12/24/2008 #3

PHP 的语法是将某些内容放在数组中的下一个可用索引处。arr[] = something

Javascript 没有这种语法;如果要将某些内容放在数组中的下一个可用索引处,请改用。arr.push(something)

但是你所指的示例部分是 HTML,而不是 Javascript。Javascript 访问它,但表单字段本身是在 HTML 中创建的......因此,您必须给它起自己的名字,而不是自动递增的名称。

如果您通过 DOM 调用动态创建 HTML(例如,对于每个输入元素,、、、但这是生成HTML的另一种方法,并且有很多陷阱需要注意。document.createElement('input')appendChild()

0赞 Tom Dibble 12/24/2008 #4

首先,您希望在 Javascript 中使用特定于 PHP 的功能。不,据我所知,没有这样的功能。

其次,我强烈建议不要使用像“date[1]”这样的 HTML 输入名称......这可能是合法的 HTML(我必须在一些浏览器中尝试以确保它被有效允许),但它几乎是 100% 维护周期中可能的错误来源。

我假设这段代码要么是为您自动生成的,要么您只想在编辑器中复制/粘贴。如果是前者,我会将自动生成代码中的元素命名为“date_1”并完成它。如果是后者,则可以在代码中保留数字(即,手动输入date_1到date_257),或使用 Javascript document.write 调用来更轻松地生成 HTML。如果真的没有其他方法,我只会做后者(document.write out HTML)。如果您谈论的是 10-25 个副本,那么手动处理它比使用 document.write 更不容易出现问题;如果您有超过 25 个这样的实例,那么自动化元素生成可能是有意义的。