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

Luk*_*sik 16 javascript jquery internet-explorer

SCRIPT5: Access denied 
jquery.min.js, line 3 char 3769
Run Code Online (Sandbox Code Playgroud)

我只是在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();  
});
Run Code Online (Sandbox Code Playgroud)

我将该表单发送到位于同一域的隐藏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">
Run Code Online (Sandbox Code Playgroud)

提交输入没有帮助

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

小智 24

如果您通过JS触发选择文件对话框,那么在提交表单时您将收到拒绝访问错误.IE不允许这样做.您将不得不要求用户直接单击输入类型文件

更多细节 https://github.com/valums/file-uploader/issues/118#issuecomment-1387612

您可以尝试通过http://www.quirksmode.org/dom/inputfile.html设置输入类型文件的样式


Wyn*_*ndB 20

我有类似的HTML和jQuery代码并遇到了同样的问题(即'访问被拒绝.'Internet Explorer中的JavaScript错误),我设法通过从这个(伟大的)答案中指出来解决.

在你的实例中:

  1. 将#icon_upl <button>/ 更改<input>为a <label>并使用标记的辅助功能,方法是将其设置for为指向<input name="icon" type="file">元素.

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

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


Ben*_*oit 5

我找到了另一种方法来做这个...我已经进行了测试,我发现它在2或3次点击提交按钮后工作.

我尝试了一些解决方案但是我自己发现了这个问题.这仅适用于ie.

请注意我不使用jquery提交方法,因为他们处理错误.

function Submit() {
    try {
        $('#FormName')[0].submit();
    } catch (e) {
        setTimeout(function () { Submit(); }, 50);
    }
}
Run Code Online (Sandbox Code Playgroud)

PS.抱歉我的英语不好,这不是我的第一语言.


the*_*dox 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'
});
Run Code Online (Sandbox Code Playgroud)

注意:但从您的帖子中尚不清楚您是否已经有类似的东西。