繁体   English   中英

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

[英]Refering to arrays of form elements (name=“blah[]”)

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

文件上载字段开始显示为灰色,用户可以上载新文件,如果以前曾在该位置上载过文件,则可以删除文件,也可以保持不变(即使用先前上载的文件或将其保留为空白)。

待办事项字段应存储将对每个文件执行的操作(即0 =上载新文件,1 =删除现有文件,2 =保留不变)。

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

当表单发布到PHP文档时,我发现了用于创建数组的name =“ blah []”技术,该技术使循环浏览文件变得非常轻松。 麻烦的是,我需要在相关的“ todo”字段中编辑值,如果它们都被命名为“ 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" />

我敢肯定我会丢失一些东西,而这实际上很简单...

除名称外,还可以给字段id 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周围存在名称空间错误[它倾向于- 完全不正确 -将它们放在相同的名称空间中])。

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

编辑 :意识到您不会在javascript中即时创建字段,但命名仍然适用

您可以为每个待办事项输入提供一个您记得的唯一ID,或者,我相信您可以使用

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

等等。

如果我了解您的要求,那么您希望能够具有多个用于上载文件的字段。 例如,如果您有3个文件要修改,那么您将有3个隐藏的待办事项字段?

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

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

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

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

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

发布表单后,您可以从numFiles字段中提取文件数,并循环浏览所有待办事项,并在末尾附加一个数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM