【发布时间】:2011-04-08 01:58:44
【问题描述】:
嗨,
我有几个像这样的输入类型文件元素:
<input type="file" name="files" id="file0">
<input type="file" name="files" id="file1">
<input type="file" name="files" id="file2">
...
这个元素被绑定到jquery的改变事件,像这样:
$('input[type=file]').change(FileChangeHandler);
FileChangeHandler 看起来像这样(这并不重要,但我以其他方式发布):
function FileChangeHandler() {
if($(this).val().length > 0){
UpdateFileInputs();
}
}
function UpdateFileInputs()
{
var hiddenClass = 'fileHidden';
var visibleClass = 'fileVisible';
var emptyAndVisibleFound = false;
if(!FileThresholdReached())
{
for(var i = 0; i < 10; i++){
if($('#fileInput' + i).hasClass(visibleClass)){
if($('#file' + i).val().length < 1){
if(!emptyAndVisibleFound){
emptyAndVisibleFound = true;}
else{
$('#fileInput' + i).attr('class' , hiddenClass);}
}
}
else{
if(!emptyAndVisibleFound){
$('#fileInput' + i).attr('class' , visibleClass);
emptyAndVisibleFound = true;
}
else{
$('#fileInput' + i).attr('class' , hiddenClass);}
}
}
}
}
问题:问题在于,在 IE8 中,当输入文件元素失去焦点时(不是在文件浏览器之前或之后),更改似乎首先被触发。在Firefox中,文件浏览器关闭后直接进行更改?在这种情况下,我更喜欢 firefox 的方式。
我该如何解决这个问题?
致以最诚挚的问候
注意:我尝试创建一个 jsfiddle.net 示例,但这并没有显示问题:http://jsfiddle.net/snowman/NCQ5J/
更新:我现在已经设法得到一个工作示例,请看这里:http://www.test.figurspel.net/
【问题讨论】:
-
对我来说似乎工作正常——当你尝试做一些简单的事情时会发生什么 $('input:file').change(function(){ alert(); }); ?
-
@Richard > 如果我将更改事件切换到您的示例,那么当点击浏览按钮时,FF 中绝对不会发生任何事情。在 IE 中会发生以下情况:点击浏览按钮,在文件浏览器中选择文件,点击打开,直到文件输入失去焦点,什么都不会发生。如果我关注另一个输入,警报将运行,如果我关注 IE8 中的迷你搜索栏,IE8 将冻结(加载)(几乎总是)。我如何提供更多信息来解决这个问题?
标签: jquery html firefox internet-explorer-8