在自定义文件上传中使用jquery设置val()后需要单击提交按钮两次

我试图通过隐藏它并放入我自己的控件来设置ASP.NET FileUpload控件的样式。 我是用jQuery做的:

$(function () { $('input[type=file]').each(function () { var fileUpload = $(this); var textBox = $(''); textBox .css('width', fileUpload.width() - 85) .css('margin-right', 5) .prop('disabled', fileUpload.prop('disabled')); var button = $('') .prop('disabled', fileUpload.prop('disabled')); fileUpload.change(function () { textBox.val(fileUpload.val()); }); button.click(function () { fileUpload.click(); }); fileUpload.after(button).after(textBox); fileUpload.hide(); }); }); 

这基本上很好用,除了我需要在IE(10)中两次单击我的提交按钮。 我无法在jsFiddle中重现这一点,但我确实在它发生的情况下制作了一个简化的ASP.NET项目 。

在Firefox中,我没有这个问题。 有谁知道我可以从哪里开始看?

Fabi对这个问题的回答为我解决了这个问题 。 可能,它是某种安全function,我不确定。 但是通过使用标签进行文件上传,您只需要单击标签一次。

您必须将标签设置为按钮的样式。 在jsFiddle中有一个很好的解释。 我不确定关于Mozilla的评论。 它对我来说在Firefox中运行良好。

出于安全原因,您无法在IE中设置FileUpload样式,而且在每个浏览器中您可能看到的变化很小。

朋友为我的项目提供的解决方案是隐藏FileUpload并在其上放置一些图像。 这个概念是给FileUpload不透明度0和zindex高,按钮zindex低和位置绝对。

这是我们项目的代码示例

.NewInvoiceDialog .AspFileUpload {cursor:pointer; 位置:绝对; z-index:1; -moz-opacity:0.00; 不透明度:.00; filter:alpha(opacity = 00); }

.NewInvoiceDialog .stepBlueButtonWrapper.AddInvoiceFile {float:none; 的z-index:0; }

.NewInvoiceDialog .stepBlueButtonWrapper.AddInvoiceFile * {z-index:0; 光标:文本; }