【问题标题】:Refering to arrays of form elements (name="blah[]")引用表单元素数组 (name="blah[]")
【发布时间】:2009-10-01 15:03:26
【问题描述】:

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

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

待办事项字段应存储每个文件要执行的操作(即 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" />

我很确定我遗漏了一些东西,而且这实际上很简单......

【问题讨论】:

    标签: php javascript arrays


    【解决方案1】:

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

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

    在 JavaScript 中,document.getElementById("todo_0") 将为您提供第一个 todo 字段。确保 ids 保持足够的不同,以免 Internet Explorer 混淆(它在 idname 周围存在命名空间错误 [它倾向于 -- 完全错误 -- 把它们在同一个命名空间中])。

    【讨论】:

    • 谢谢。我刚刚实现了它,它工作正常。当您使用处理它的 php 时,真正的困惑就出现了,因为如果您只上传一个文件(例如,在第三个插槽中),那么 $_POST 和 $_FILES 数组就不会对齐!不过很容易解决...如果有人感兴趣,这里有一些伪代码: for ($x=0;$x
    【解决方案2】:

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

    编辑: 意识到您不是在 javascript 中动态创建字段,但命名仍然适用

    【讨论】:

      【解决方案3】:

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

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

      等等。在您的 HTML 中。

      【讨论】:

        【解决方案4】:

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

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

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

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

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

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

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

        【讨论】:

        • 很好的答案,但我不是用 javascript 添加字段,只是改变已经存在的内容。
        • 是的,我刚刚从 Tom 所说的内容中注意到了这一点。很抱歉误读了。
        猜你喜欢
        • 2011-06-09
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2020-11-04
        • 2011-09-21
        • 2013-12-20
        • 2015-07-14
        • 1970-01-01
        相关资源
        最近更新 更多