问题出在
//---创建一个file input对象并返回
function newFileInput(_name){
var oFileInput = document.createElement("INPUT");
oFileInput.type = "file";
oFileInput.setAttribute("id",_name);
oFileInput.setAttribute("name",_name);
return oFileInput;
}
中的
oFileInput.setAttribute("id",_name);
oFileInput.setAttribute("name",_name);
这两句中,去掉就可以了,但不知道是为什么?
//---创建一个file input对象并返回
function newFileInput(_name){
var oFileInput = document.createElement("INPUT");
oFileInput.type = "file";
oFileInput.setAttribute("id",_name);
oFileInput.setAttribute("name",_name);
return oFileInput;
}
中的
oFileInput.setAttribute("id",_name);
oFileInput.setAttribute("name",_name);
这两句中,去掉就可以了,但不知道是为什么?
我又发现,是我的程序有点问题,在一个函数里直接创建file input并选择文件是可以提交的,分开几个函数就不行了。
正在研究中......
1 原来已经存在的file input,调用click方法让用户选择文件可以提交
2 动态创建的file input,用户自己点击file input的浏览按钮选择文件可以提交
3 动态创建的file input,调用click方法让用户选择文件不能提交,出现拒绝访问现象我现在就是第3种情况,谁可以解释一下?
//---创建一个file input对象并返回
function newFileInput(_name){
var oFileInput = document.createElement("INPUT");
oFileInput.type = "file";
oFileInput.outerHTML = '<INPUT type="file" id="' + _name + ' name="' + _name + '>';
return oFileInput;
}
但原因未明,谁解释出来这分就全部给他了!
如果通过outerHTML来写id,name,等属性,值是取不到的,这个结论可以通过在
addFile(oFileInput)函数的最后加上一句
alert(document.forms[0].upfile_1.name)得到是空引用的错误来证明。
<HEAD>
<SCRIPT language="javascript">
function add()
{
tes.innerHTML += "<input type='file'><br>";
}
</SCRIPT>
</HEAD>
<BODY>
<FORM action="b.asp" method="post" enctype="multipart/form-data" onsubmit="alert()">
<input type="button" onclick="add();">
<INPUT type="submit" value="Ìá½»">
<div id="tes"></div>
</FORM>
</BODY>
</HTML>
IE对使用DOM方法与指定HTML方法的解释不一样。
outerHTML可能让IE对那部分的HTML重新解释(可能有一些权限或者其他信息的调整),然后再调整DOM节点结构
而DOM的appendChild对象只是改变DOM的节点结构,其他相关内容没有更新,导致在访问时出现权限不够的问题不过这可能是在File Input这种有权限要求的Element上才回出现的,也许这也是IE中的一个Bug.不知道我得想法是否正确,请指教?
<HTML>
<HEAD>
<SCRIPT language="javascript"> //---新建上传
function newUpload(){
var fileCount = fileList.childNodes.length + 1;
var fileInput = newFileInput("upfile_" + fileCount);
if(selectFile(fileInput)){
addFile(fileInput);
}
}
//----选择文件
function selectFile(oFileInput){
uploadFiles.appendChild(oFileInput);
oFileInput.click();
var fileValue = oFileInput.value;
if(fileValue == ""){
uploadFiles.removeChild(oFileInput);
return false;
}
else
return true;
}
//---新建一个文件显示列表
function addFile(oFileInput){
var fileIndex = fileList.childNodes.length + 1;
var oTR = document.createElement("TR");
var oTD1 = document.createElement("TD");
var oTD2 = document.createElement("TD");
oTR.setAttribute("id","file_" + fileIndex);
oTD1.setAttribute("width","90%");
oTD2.setAttribute("width","10%");
oTD2.setAttribute("align","center");
oTD1.innerText = oFileInput.value;
oTD2.innerHTML = '<A href="javascript:removeFile('+ fileIndex + ');">删除</A>';
oTR.appendChild(oTD1);
oTR.appendChild(oTD2);
fileList.appendChild(oTR);
}
//---移除上传的文件
function removeFile(fileIndex){
var oFileInput = document.all("upfile_" + fileIndex);
var oTR = document.all("file_" + fileIndex);
uploadFiles.removeChild(oFileInput);
fileList.removeChild(oTR);
}
//---创建一个file input对象并返回
function newFileInput(_name){
var oFileInput = document.createElement("INPUT");
oFileInput.type = "file";
oFileInput.outerHTML = '<INPUT type="file" id="' + _name + ' name="' + _name + '>';
return oFileInput;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM action="b.asp" method="post" enctype="multipart/form-data">
<TABLE border="1" width="100%">
<TR>
<TD width="90%"> </TD>
<TD align="center" width="10%"> <A href="javascript:newUpload();">上传</A> </TD>
</TR>
<TR>
<TD colspan="2" height="300" valign="top">
<TABLE border="1" width="100%" cellpadding="0" cellspacing="0">
<TBODY id="fileList">
</TBODY>
</TABLE>
</TD>
</TR>
</TABLE>
<INPUT type="submit" value="提交">
<DIV id="uploadFiles" style="display:none"></DIV>
</FORM>
</BODY>
</HTML>
刚才那个还是有点小问题,下面是最新的
<HTML>
<HEAD>
<SCRIPT language="javascript"> //---新建上传
function newUpload(){
var fileCount = fileList.childNodes.length + 1;
var fileInput = newFileInput("upfile_" + fileCount);
if(selectFile(fileInput)){
addFile(fileInput);
}
}
//----选择文件
function selectFile(oFileInput){
uploadFiles.appendChild(oFileInput);
oFileInput.click();
var fileValue = oFileInput.value;
if(fileValue == ""){
uploadFiles.removeChild(oFileInput);
return false;
}
else
return true;
}
//---新建一个文件显示列表
function addFile(oFileInput){
var fileIndex = fileList.childNodes.length + 1;
var oTR = document.createElement("TR");
var oTD1 = document.createElement("TD");
var oTD2 = document.createElement("TD");
oTR.setAttribute("id","file_" + fileIndex);
oTD1.setAttribute("width","90%");
oTD2.setAttribute("width","10%");
oTD2.setAttribute("align","center");
oTD1.innerText = oFileInput.value;
oTD2.innerHTML = '<A href="javascript:removeFile('+ fileIndex + ');">删除</A>';
oTR.appendChild(oTD1);
oTR.appendChild(oTD2);
fileList.appendChild(oTR);
}
//---移除上传的文件
function removeFile(fileIndex){
var oFileInput = document.all("upfile_" + fileIndex);
var oTR = document.all("file_" + fileIndex);
uploadFiles.removeChild(oFileInput);
fileList.removeChild(oTR);
}
//---创建一个file input对象并返回
function newFileInput(_name){
var oFileInput = document.createElement("INPUT");
oFileInput.type = "file";
oFileInput.setAttribute("id",_name);
oFileInput.outerHTML = '<INPUT type="file" id="' + _name + ' name="' + _name + '>';
return oFileInput;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM action="b.asp" method="post" enctype="multipart/form-data">
<TABLE border="1" width="100%">
<TR>
<TD width="90%"> </TD>
<TD align="center" width="10%"> <A href="javascript:newUpload();">上传</A> </TD>
</TR>
<TR>
<TD colspan="2" height="300" valign="top">
<TABLE border="1" width="100%" cellpadding="0" cellspacing="0">
<TBODY id="fileList">
</TBODY>
</TABLE>
</TD>
</TR>
</TABLE>
<INPUT type="submit" value="提交">
<DIV id="uploadFiles" style="display:none"></DIV>
</FORM>
</BODY>
</HTML>
<!--#INCLUDE FILE="../INCLUDES/LOCAL_VARIABLES.ASP"-->
<!--#INCLUDE FILE="../INCLUDES/AUTHENTICATE.ASP"-->
<HTML>
<HEAD>
<script language="javascript">
function AddMoreRow()
{
oButton=event.srcElement;
oOldRow=oButton.parentNode.parentNode.previousSibling;
oTable=oOldRow.parentNode.parentNode;
oNewRow=oTable.insertRow(oTable.rows.length-1);
for(i=0;i<oOldRow.cells.length;i++)
{
oCell=oNewRow.insertCell();
oCell.innerHTML=oOldRow.cells[i].innerHTML;
oCell.align=oOldRow.cells[i].align;
oCell.vAlign=oOldRow.cells[i].vAlign;
oCell.colSpan=oOldRow.cells[i].colSpan;
for(j=0;j<oCell.childNodes.length;j++)
{
if(oCell.childNodes(j).tagName=="TABLE")
{
nRowCount=oCell.childNodes(j).rows.length-2;
for(k=0;k<nRowCount;k++)
{
oCell.childNodes(j).deleteRow(0);
}
oCell.childNodes(j).all("Group" + i).value=oNewRow.rowIndex;
for(k=0;k<oCell.childNodes(j).all.length;k++)
{
if(oCell.childNodes[j].all(k).type=="text")
{
oCell.childNodes[j].all(k).value=""
oCell.childNodes[j].all(k).readOnly=false;
}
if(oCell.childNodes[j].all(k).type=="button")
{
oCell.childNodes[j].all(k).disabled=false;
}
if(oCell.childNodes[j].all(k).name=="NumberInGroup" + i
&& oCell.childNodes[j].all(k).type=="text")
{
oCell.childNodes[j].all(k).value=1;
}
}
}
if(oCell.childNodes(j).tagName=="SPAN")
{
oCell.childNodes(j).innerText="";
}
if(oCell.childNodes(j).tagName=="SELECT")
{
oCell.childNodes(j).selectedIndex=0;
}
if(oCell.childNodes[j].type=="text")
{
oCell.childNodes[j].value=""
oCell.childNodes[j].readOnly=false;
}
if(oCell.childNodes[j].type=="hidden")
{
oCell.childNodes[j].value=""
}
if(oCell.childNodes[j].type=="button")
{
oCell.childNodes[j].disabled=false;
}
if(oCell.childNodes[j].nodeType==1&&oCell.childNodes[j].readyState==4)
{
if(oCell.childNodes[j].tagName=="OBJECT"
&&oCell.childNodes[j].classid=="CLSID:35020238-5912-11D1-9A00-00C04FD8DC2E")
{
oCell.childNodes[j].object.Font=oOldRow.cells[i].childNodes[j].object.Font;
}
}
}
}
if(oTable.parentNode.tagName=="TD")
{
iCellIndex=oTable.parentNode.cellIndex;
if(oButton.parentNode.all('NumberInGroup'+iCellIndex)!=null)
{
oButton.parentNode.all('NumberInGroup'+iCellIndex).value=oTable.rows.length-1;
}
}
}
</script>
</HEAD>
<body SCROLL=no>
<FORM ENCTYPE="multipart/form-data" target="_hideFrame" method=post onsubmit="">
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr class="blue_bg">
<td width="10%">Attachment</td>
<td width="10%">Res</td>
</tr>
<tr>
<td width="10%">
<INPUT class="input" name=Attachment type=file size="23" onkeypress="return false;">
</td>
<td width="10%">
<INPUT class="input" name="Comment" size="40" maxlength=255>
</td>
</tr>
<tr>
<td width="10%"> </td>
<td width="10%" align="right">
<INPUT class="btn" type="button" value="Add More Attachments" onclick="AddMoreRow()">
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr class="blue_bg">
<td colspan=2><B>Laserfiche Link</B></td>
</tr>
<tr class="blue_bg">
<td>Laserfiche Key</td><td>Comment</td>
</tr>
<tr>
<td width="10%">
<INPUT class="input" name=Laserfiche_Key size="23">
</td>
<td width="10%">
<INPUT class="input" name="L_Comment" size="40" maxlength=255>
</td>
</tr>
<tr>
<td width="10%"> </td>
<td width="10%" align="right">
<INPUT class="btn" type="button" value="Add More Attachments" onclick="AddMoreRow()">
</td>
</tr>
</table>
<table><tr><td><input type=submit name="confirm"></td></tr></table>
</form>
<iframe height=0 src=about:blank name=_hideFrame></iframe>
</body>
</HTML>
<!--#INCLUDE FILE="../../FUNCTIONS/PUBLIC_FUNCTIONS.ASP" -->
<!--#INCLUDE FILE="../INCLUDES/LOCAL_VARIABLES.ASP"-->
<!--#INCLUDE FILE="../INCLUDES/AUTHENTICATE.ASP"-->
<!--#INCLUDE FILE="../INCLUDES/FILEUPLOAD.ASP"-->
<%
if UCase(Request.ServerVariables("REQUEST_METHOD"))<>"POST" then
Response.End
end if
Set UploadRequest=CreateObject("Scripting.Dictionary")
RequestBin=Request.BinaryRead(Request.TotalBytes)
GetUpload RequestBin
for i=0 to UploadRequest("Comment").count-1
if len(UploadRequest("Attachment")(i)("Value"))>0 then
FileName=dfStrCheckSingle(UploadRequest("Attachment")(i)("FileName"))
FileNameArray=split(FileName,".")
ContentType=dfStrCheckSingle(UploadRequest("Attachment")(i)("ContentType"))
Comment=dfStrCheckSingle(UploadRequest("Attachment")(i)("Comment"))
'Process UploadRequest("Attachment")(i)("Value")
end if
next
end if
for i=0 to UploadRequest("Laserfiche_Key").Count-1
if UploadRequest("Laserfiche_Key")(i)("Value")<>"" then
LaserficheKey=dfStrCheckSingle(UploadRequest("Laserfiche_Key")(i)("Value"))
Comment=dfStrCheckSingle(UploadRequest("L_Comment")(i)("Value"))
end if
next
end if
Response.Write "<script language=javascript>"
Response.Write "parent.parent.bAttachmentSaved=true;"
Response.Write "if(parent.parent.bAttachmentSaved && parent.parent.bPartiesSaved)"
Response.Write "{"
Response.Write " parent.parent.location='../REVIEW/DOCUMENT_FILING_INDEX_REVIEW.ASP?DocInx='+parent.parent.DocInx"
Response.Write "}"
Response.Write "</script>"
%>
sub GetUpload(FormData)
Dim DivStr,DivLen,PosOpenBoundary,PosCloseBoundary
Dim FieldNameStart,FormFieldName,FieldNameSize,FormFieldData,DataStart,DataEnd,DataSize
Dim FieldFileNameStart,FormFileName,FieldFileNameSize
Dim FieldFileCTStart,FormFileCT,FieldFileCTSize
'分隔标志串(+CRLF),
DivStr=LeftB(FormData,InStrB(FormData,str2bin(VbCrLf))-1)
'分隔标志串长度
DivLen=LenB(DivStr)
PosOpenBoundary=InStrB(FormData,DivStr)
PosCloseBoundary=InStrB(PosOpenBoundary+1,FormData,DivStr)
Do until PosCloseBoundary=lenb(FormData) or PosCloseBoundary=0 '(PosOpenBoundary=lenb(FormData))
dim Field,FirstField,bIsFile
bIsFile=false
FormFieldName=""
Set Field=CreateObject("Scripting.Dictionary")
'Name起始位置(Name="xxxxx"),加6是因为[Name="]长度为6
FieldNameStart=InStrB(PosOpenBoundary,FormData,str2bin("name="))+6
FieldNameSize=InStrB(FieldNameStart,FormData,ChrB(34))-FieldNameStart'(")的ASC值=34
FormFieldName=bin2str(MidB(FormData,FieldNameStart,FieldNameSize)) 'FileName起始位置(FileName="xxxxx")
FieldFileNameStart=InStrB(PosOpenBoundary,FormData,str2bin("filename="))+10
if PosCloseBoundary=0 then
PosCloseBoundary=lenb(FormData)
end if
If FieldFileNameStart<PosCloseBoundary And FieldFileNameStart>PosopenBoundary Then
FieldFileNameSize=InStrB(FieldFileNameStart,FormData,ChrB(34))-FieldFileNameStart '(")的ASC值=34
FormFileName=bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize))
Field.Add "FilePath",FormFileName
Field.Add "FileName",GetFileName(FormFileName)
bIsFile=true
End If
'Content-Type起始位置(Content-Type: xxxxx)
FieldFileCTStart=InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:"))+14
If FieldFileCTStart<PosCloseBoundary And FieldFileCTStart>PosOpenBoundary Then
FieldFileCTSize=InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf))-FieldFileCTStart
FormFileCT=bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize))
Field.Add "ContentType",FormFileCT
End If
'数据起始位置:2个CRLF开始
If bIsFile Then
DataStart=InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf))+4
DataEnd=InstrB(DataStart,FormData,DivStr)-2
FormFieldData=MidB(FormData,DataStart,DataEnd-DataStart)
Else
DataStart=InstrB(FieldNameStart,FormData,str2bin(VbCrLf))+4
DataEnd=InstrB(DataStart,RequestBin,DivStr)-2
FormFieldData=bin2str(MidB(FormData,DataStart,DataEnd-DataStart))
End If
Field.Add "Value",FormFieldData
Field.Add "FieldDataBgnPos",DataStart
Field.Add "FieldDataLength",DataEnd-DataStart
if UploadRequest.Exists(FormFieldName) then
iCount=UploadRequest(FormFieldName).Count
UploadRequest(FormFieldName).Add iCount,Field
else
Set FirstField=CreateObject("Scripting.Dictionary")
FirstField.Add 0,Field
UploadRequest.Add FormFieldName,FirstField
end if
PosOpenBoundary=PosCloseBoundary
PosCloseBoundary=InStrB(PosOpenBoundary+1,FormData,DivStr)
loop
End sub
'把二进制字符串转换成普通字符串函数
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag,i
'中文字符Skip标志
skipflag=0
ccc=""
If Not IsNull(binstr) Then
varlen=LenB(binstr)
For i=1 To varlen
If skipflag=0 Then
clow=MidB(binstr,i,1)
'判断是否中文的字符
If AscB(clow)>127 Then
'AscW会把二进制的中文双字节字符高位和低位反转,所以要先把中文的高低位反转
ccc=ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))
skipflag=1
Else
ccc=ccc & Chr(AscB(clow))
End If
Else
skipflag=0
End If
Next
End If
bin2str=ccc
End Function'把普通字符串转成二进制字符串函数
Function str2bin(varstr)
dim i,varchar,varasc
str2bin=""
For i=1 To Len(varstr)
varchar=mid(varstr,i,1)
varasc=Asc(varchar)
'asc对中文字符求出来的值可能为负数,
'加上65536就可求出它的无符号数值
'-1在机器内是用补码表示的0xffff,
'其无符号值为65535,65535=-1+65536
'其他负数依次类推。
If varasc<0 Then
varasc=varasc+65535
End If
'对中文的处理:把双字节低位和高位分开
If varasc>255 Then
varlow=Left(Hex(Asc(varchar)),2)
varhigh=right(Hex(Asc(varchar)),2)
str2bin=str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
Else
str2bin=str2bin & chrB(AscB(varchar))
End If
Next
End Function
'取得文件名(去掉Path)
Function GetFileName(FullPath)
If FullPath<>"" Then
FullPath=StrReverse(FullPath)
if InStr(1,FullPath,"\")>0 then
FullPath=Left(FullPath,InStr(1,FullPath,"\")-1)
GetFileName=StrReverse(FullPath)
else
GetFileName=StrReverse(FullPath)
end if
Else
GetFileName=""
End If
End Function
%>