我有一个包含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" />
我很确定我错过了一些东西,这其实很简单......
答案 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不要混淆(它有id
和name
周围的命名空间错误[它往往 - 完全错误} em> - 将它们放在同一名称空间中)。
答案 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,并在末尾添加一个数字。