表单提交 - IE访问被拒绝 - 相同的域名

时间:2012-05-19 18:31:30

标签: javascript jquery internet-explorer

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">

提交输入无效

如果我尝试发送另一个工作正常的表单,我不会得到它

6 个答案:

答案 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>

在你的实例中:

  1. 将#icon_upl <button> / <input>更改为<label>,并通过在其上设置for属性指向,使用代码的辅助功能您的<input name="icon" type="file">元素。

    这有效地使您的click()事件处理程序变得多余。但是,单击Firefox中的<label>似乎不会触发文件<input>对话框,因此如果浏览器是Mozilla,您需要执行浏览器测试并仍然拥有click()事件处理程序基

  2. 为了使其正常工作,您需要确保文件<input>未被隐藏,方法是将其位置设置为绝对位置并将其移出屏幕。

    < / LI>

答案 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)

似乎不可能

  
      
  1. 您无法读取元素的“值”,因为它包含文件名。
  2.   
  3. 您无法通过JS启动文件选择菜单。
  4.   
  5. 您无法通过JS解除文件上传器控件的提交。
  6.   

来自getting access is denied error on IE8

答案 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);