引用表单元素的数组(name =“blah []”)

时间:2009-10-01 15:03:27

标签: php javascript arrays

我有一个包含3个文件上传字段系列的表单,每个字段都有一个相关的隐藏“待办事项”字段。

文件上传字段显示为灰色,用户可以上传新文件,如果先前已在该位置上传文件,则删除文件或保持文件不变(即使用以前上传的文件或将其留空)。 / p>

todo字段应该存储每个文件要做的事情(即0 =上传新文件,1 =删除现有文件,2 =保持不变)。

我在上传字段旁边有一系列按钮。一个用于“上传新”(它启用文件上传字段和(应该)将相关的待办事项字段设置为0;一个用于删除(禁用文件上传框);一个用于“保持不变”(这也禁用文件)上传字段)。

我发现name =“blah []”技术用于在将表单发布到PHP文档时创建数组,这样可以很方便地循环遍历文件。问题是我需要编辑相关“待办事项”字段中的值,如果它们都被命名为“todo []”那么我就不能专门提到一个......

代码是这样的:

<input type="file" name="file[]" />
<input type="hidden" name="todo[]" />
<input type="button" onclick="enableFileField('file[]', 0)" value="Upload New" />
<input type="button" onclick="enableFileField('file[]', 1)" value="Remove Current" />
<input type="button" onclick="enableFileField('file[]', 2)" value="No Change" />

我很确定我错过了一些东西,这其实很简单......

4 个答案:

答案 0 :(得分:2)

除名称外,您还可以提供字段 id s name将用于发布到服务器,但id可用于引用JavaScript中的输入:

<input type='hidden' id='todo_0' name='todo[]'>
<input type='hidden' id='todo_1' name='todo[]'>

在JavaScript中,document.getElementById("todo_0")会为您提供第一个todo字段。请确保id与Internet Explorer不要混淆(它有idname周围的命名空间错误[它往往 - 完全错误 - 将它们放在同一名称空间中)。

答案 1 :(得分:1)

您可以在添加更多字段时在javascript中增加计数器,因此您可以创建todo [0],todo [1]等。这不会改变PHP解释它的方式。

修改: 意识到你不是在javascript中动态创建字段,但命名仍然适用

答案 2 :(得分:0)

您可以为每个todo输入提供您记住的唯一ID,或者,我相信您可以使用

<input type='hidden' name='todo[0]' />
<input type='hidden' name='todo[1]' />

等。在你的HTML中。

答案 3 :(得分:0)

如果我理解您的要求,您希望能够使用多个字段来上传文件。例如,如果要修改3个文件,则会有三个隐藏的待办事项字段?

快速简便的解决方案是为文件数量保留隐藏字段,例如:

<input type='hidden' name='numFiles' value='1' />

并在使用javascript添加或删除文件时进行更新。然后正如其他人所建议的那样,给每个待办事项一个唯一的ID:

<input type='hidden' name='todo1' />

现在您可以轻松找到待办事项,因为每个文件都有一个独特的文件,您可以从那里更新。

发布表单后,您可以从numFiles字段中提取所有文件的数量,然后遍历所有todo,并在末尾添加一个数字。