遇到了一个非常奇怪的问题,似乎是特定于 IE 的。
我有一个带有 FileUpload 控件的表单。但是,它不可能(据我所知)单独设置此控件的按钮和文本框的样式,所以我所做的是向页面添加第二个按钮,按照我的需要设置样式。在此按钮的 OnClientClick 事件中,它只需单击 FileUpload 控件的“浏览”按钮并选择文件。然后我有一个“导入”按钮,可以回发并导入文件。
在 Chrome 和 Firefox 中,这一切都很好。但是,我刚刚在 IE 中测试过,第一次点击“导入”按钮时,除了清除 FileUpload 控件外,没有任何反应。再次单击该按钮,它会回发,但现在没有要上传的文件。我已经在客户端点击按钮上发出警报,这会触发,但它不会回发。
但是,如果我直接使用“浏览”按钮,一切正常,所以这似乎与 Javascript 单击按钮有关,但是我不明白为什么会这样,而且它似乎是 IE 特定的。(IE9)。
有谁知道可能是什么原因造成的,以及我如何解决它(没有希望回到只使用不太时尚的 FileUpload 控件)?
代码如下:
<script>
function SelectFile() {
$("#<%= uplFile.ClientID %>").click();
}
</script>
<asp:Button runat="server" ID="btnSelectFile" OnClientClick="SelectFile();return false;" Text="Select File" />
<asp:FileUpload runat="server" ID="uplFile" Width="250" CssClass="FileUpload" OnChange="ShowSelectedFilename(this.value)" />
<asp:Button runat="server" ID="btnImport" Text="Import" OnClick="btnImport_Click" />
注意:我也试过没有“return false;” 在 btnSelectFile 按钮上的 OnClientClick 事件中。我也尝试过使用 document.getElementById 而不是 JQuery 来进行点击,但遇到了同样的问题。
任何帮助将非常感激。
更新:
通过在 Google 上搜索更多我遇到的其他错误(例如,尝试以编程方式提交表单或单击导入按钮时“访问被拒绝”),看起来这可能归结为 IE 中的安全功能,尽管我'我仍然不完全相信。
基本上,并且有充分的理由,微软不希望开发人员(或黑客)能够弄乱上传控制。例如,他们不希望使用 javascript 的开发人员在提交表单时能够将用户选择的文件的名称更改为“c:\mysecretfile.txt”,因此只能从客户上传他们喜欢的任何文件。但是,我实际上并没有更改文件名,我所做的只是以编程方式单击“浏览”按钮,然后从那里它就像用户自己单击它一样工作,但我希望这一切都与同一件事有关.
除非有人知道不同?