2011-10-31 60 views
0

所以我遇到了表单/隐藏iframe文件上传技术的问题,并花了好几天的时间试图找出为什么文件不会上传,直到最后找出问题所在。HTML窗体和控件名称

当我建立动态的形式,我插入的文件输入元素形式的孩子:

<input type="file" id="file-select-input" /> 

...我有这样的事情:

<form enctype="multipart/form-data" id="file-select-form" target="select-file-iframe" method="POST" action="/upload/"> 
    <div id="file-select-button" class=""> 
     <input type="file" id="file-select-input" /> 
    </div> 
</form> 
<iframe style="display: none" id="select-file-iframe" src="javascript:false;" name="select-file-iframe"></iframe> 

它事实证明,当我提交上述表格时,输入文件信息未被发送。原因是,我没有在文件输入元素上指定的name属性。所以当我改变它到这个:

<input type="file" id="file-select-input" name="file" /> 

...事情奏效。

那么为什么需要为要上传的文件设置文件输入元素的name属性?根据W3C规范,name属性分配控件名称,但控件名称是什么?它为什么如此重要?

回答

1

根据W3C规范,名称属性分配控件名称,但控件名称是什么?它为什么如此重要?

表单控件的名称控制组成发布数据或查询字符串的键/值对中的键。

不知道控件的名称,没有办法将它转换成要发送到服务器的数据。

+0

哦......这是有道理的。为什么元素的ID不起作用? ID是唯一的,名称不是 – Hristo

+0

啊,但这就是关键。想想复选框。如果您给他们所有相同的名称,该名称将在提交的数据中重复多次 - 每个复选框一次,提交数据中的值为输入元素上的'value'属性。然后,一些表单处理器可以自动或基于特定的语法将多个提交转换为数组(或类似的特定于语言的构造)。 – Charles