dre*_*gan 25 html javascript forms jquery
我有一个html表单,带有自定义文件上传字段.我的意思是我已经用css将实际文件字段移到了页面边框之外,我有一个自定义输入字段和按钮,并且我有一个附加到该自定义按钮的jquery click事件来触发文件输入对话框.在每个浏览器中一切正常.
但我需要通过javascript提交表单.而且我得到了某个地方,IE记得我用javascript作为对文件输入字段的恶意操纵,并"access denied"在我调用时阻止我的访问错误document.formName.submit().
有没有办法解决这个问题,因为我试图寻找解决方案已经完全疯了.我真的不想使用默认的文件输入字段,因为每个浏览器都以不同的方式呈现它并弄乱我的设计..
码:
<form name="thisForm" onsubmit="return false;" enctype="multipart/form-data" method="post" action="index.cfm/somepage">
<input type="file" class="hidden" name="hidden" id="hidden" />
<input type="text" name="shown" id="shown" />
<button id="button">browse..</button>
<input type="submit" id="submitForm" />
</form>
<script>
$('button').click(function(){
$('#shown').val($('#hidden').val());
});
$('submitForm').click(function(){
validateForm();
});
function validateForm()
{
//regular expression validation against all other input fields in the form
//not the file input field
validateVAT();
}
function validateVAT()
{
//connect to external service to check VAT
submitForm();
}
function submitForm()
{
document.thisForm.submit();
}
</script>
Run Code Online (Sandbox Code Playgroud)
更新: 我只是尝试在提交表单之前首先上传文件,通过ajax,但这也给了我拒绝访问错误..> _>
dji*_*i33 65
我遇到了同样的问题,我通过<label>在Firefox中使用带有轻微解决方法的样式标记解决了这个问题.
http://jsfiddle.net/djibouti33/uP7A9/
目标:
浏览器:
初始解决方案:
问题:
解决方案解决方案:
希望这可以帮助!查看jsfiddle,了解用于完成所有工作的html/js/css的详细信息.
dre*_*gan 11
我自己找到了答案,经过2天的疯狂试验和错误.我希望我可以帮助这个人..
我从coldfusion页面中删除了隐藏文件输入字段,并将其替换为iframe标记.iframe标记链接到另一个coldfusion页面,包含另一个带有已删除文件输入字段的表单.现在,当我使用javascript单击仍然从视图中隐藏的文件输入字段时,它仍然提供了浏览文件对话框.但是当我使用javascript提交表单时,通过iframe,奇迹般地,它在iframe中提交表单,从而可以在您偏好的某些服务器端脚本中上传文件.
iframe代码:
<form id="formFileUpload" class="formFileUpload" name="formFileUpload" method="post" action="../actions/act_upload_file.cfm" autocomplete="off" enctype="multipart/form-data">
<input type="file" class="buttonFileHidden" id="inputFile" name="partnersLogo" />
</form>
Run Code Online (Sandbox Code Playgroud)
iframe本身:
<iframe src="admin/dsp_file_upload.cfm" id="ifu" name="ifu" class="buttonFileHidden">
</iframe>
Run Code Online (Sandbox Code Playgroud)
javascript点击并提交:
ifu.document.formFileUpload.partnersLogo.click();
ifu.document.formFileUpload.submit();
Run Code Online (Sandbox Code Playgroud)
如果你像我一样,并且你不想使用iframe,并且你不太热衷于上面提到的标签解决方案,你可以将原始按钮放在样式按钮上方,不透明度为0.
使用上面的示例,您仍然可以:
<input type="file" class="hidden" name="hidden" id="hidden" />
<input type="button" name="shown" id="shown" value="Add File" />
Run Code Online (Sandbox Code Playgroud)
但是.hidden会这样定义:
.hidden {
position: absolute;
left: -150px;
opacity: 0;
filter: alpha(opacity=0);
}
Run Code Online (Sandbox Code Playgroud)
配置:将不透明度设置为0.5(或= 50)以查看透明元素并调整左侧定位.
可以说就像上面的答案一样hacky,但是一个引导友好的解决方案,在我的情况下,唯一有效的解决方案.