SCRIPT5: Access denied
jquery.min.js, line 3 char 3769
我通过IE中的简单表单提交收到此错误
$("#icon_upl").click(function(){ //icon_upl is button which open dialog
$("[name=icon]").click();
});
$("[name=icon]").change(function() { //icon is hidden file input
$("[name=upload_icon]").submit();
});
我将该表单发送到位于同一域的隐藏iframe。
<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;display:none;"></iframe>
<form name="upload_icon" action="upload_icon.php" method="post" enctype="multipart/form-data" target="upload_target">
提交输入无效
如果我尝试发送另一个工作正常的表单,我不会得到它
答案 0 :(得分:24)
如果您通过JS触发选择文件对话框,那么在提交表单时您将收到拒绝访问错误。 IE不允许这样做。您将不得不要求用户直接点击输入类型文件
这里有更多细节 https://github.com/valums/file-uploader/issues/118#issuecomment-1387612
您可以尝试设置输入类型文件的样式 http://www.quirksmode.org/dom/inputfile.html
答案 1 :(得分:20)
我有类似的HTML和jQuery代码并遇到了同样的问题(即'访问被拒绝。'Internet Explorer中的JavaScript错误),我设法通过从this(伟大)回答中指出来解决。< / p>
在你的实例中:
将#icon_upl <button>
/ <input>
更改为<label>
,并通过在其上设置for
属性指向,使用代码的辅助功能您的<input name="icon" type="file">
元素。
这有效地使您的click()
事件处理程序变得多余。但是,单击Firefox中的<label>
似乎不会触发文件<input>
对话框,因此如果浏览器是Mozilla,您需要执行浏览器测试并仍然拥有click()
事件处理程序基
为了使其正常工作,您需要确保文件<input>
未被隐藏,方法是将其位置设置为绝对位置并将其移出屏幕。
答案 2 :(得分:5)
我找到了另一种方法来做到这一点...... 我已经进行了测试,我发现它在2或3次点击提交按钮后工作。
我已经尝试了一些解决方案但是我自己发现了这个问题。 这仅适用于ie。注意我不使用jquery submit方法,因为它们处理错误。
function Submit() {
try {
$('#FormName')[0].submit();
} catch (e) {
setTimeout(function () { Submit(); }, 50);
}
}
PS。抱歉我的英语不好,这不是我的第一语言。
答案 3 :(得分:1)
您可以在隐藏的输入字段上触发直接事件,因为您无法捕获它。可以用它绑定事件并通过另一个触发它。
例如:
// binding event to hidden field
$('input[name=icon]:hidden').on('click', function() {
alert('Hidden triggered');
});
// some button/ or else
// some_target is any valid selector you can use
$('some_target').on('click', function() {
$('input[name=icon]:hidden').click(); // triggering click on hidden field will alert 'Hidden triggered'
});
注意:但是从你的帖子中不清楚你是否已经有这样的事情。
答案 4 :(得分:0)
似乎不可能
- 您无法读取元素的“值”,因为它包含文件名。
- 您无法通过JS启动文件选择菜单。
- 您无法通过JS解除文件上传器控件的提交。
醇>
答案 5 :(得分:-1)
//Access Denied Issues is usually for IE.
var lblTrigger= document.getElementById('lblTrigger');
lblTrigger.onclick = function(){
var form = document.getElementById('form1');
form.fxSubmit();
}
var form = document.getElementById('form1'); //form with upload control
var upctrl = document.getElementById('file_1'); //file upload control
form.fxSubmit = function() {
var upctrl = document.getElementById('file_1'); //file upload control
if (upctrl.files){
var form = document.getElementById('form1');
form.submit();
}else{
document.body.submit = true;
}
}
function fxSubmit(){
if (document.body.submit){
var form = document.getElementById('form1');
setTimeout(function(){fxSubmit()},50);
form.submit();
return;
}
setTimeout(function(){fxSubmit()},1000);
}
setTimeout(function(){fxSubmit()},1000);