当用户选择文件并关闭对话框后,我无法检测到 input type="file" 改变其值的情况。
$('.myInput').change(function(){
alert($(this).val());
})
除了IE之外,上述jQuery代码在所有浏览器中都能完美运行。由于某种原因,在输入字段失去焦点之后,IE才会检测到更改。
是否有一种方法可以在对话框关闭后立即检测更改?或者强制使输入字段在对话框关闭后失去焦点,以便IE可以检测到它?
我很困惑。谢谢任何帮助。
当用户选择文件并关闭对话框后,我无法检测到 input type="file" 改变其值的情况。
$('.myInput').change(function(){
alert($(this).val());
})
除了IE之外,上述jQuery代码在所有浏览器中都能完美运行。由于某种原因,在输入字段失去焦点之后,IE才会检测到更改。
是否有一种方法可以在对话框关闭后立即检测更改?或者强制使输入字段在对话框关闭后失去焦点,以便IE可以检测到它?
我很困惑。谢谢任何帮助。
这是一个已知的 bug,作为 jQuery 1.4.2 版本中的一部分得到了解决。1.4.2 进行了主要事件模型重写,并在此期间修复了该问题,只需要升级即可解决问题:)(查看详情)(查看 jQuery 1.4.2 发布说明)(了解主要事件模型重写)
编辑 - Nick是对的,它在1.4.2中被修复了。 http://jsfiddle.net/7wR2L/
您可以检测点击并跟踪其最后一个值。类似于..
$('.myInput').click(function() {
var $file = $(this);
if( $file.val() != $file.data('lastVal') ) {
// different
}
$file.data('lastVal', $file.val() );
});
Dan Heberden关于更新到1.4.2版本的评论是可行的。
但是,如果使用另一个元素来触发文件选择,则文件输入元素不再注册“更改”事件。
我为此创建的新问题有一个fork您的fiddle以说明这种情况。详情请参见 jQuery:“change”事件在文件输入元素上不会触发,如果文件选择是由文件之外的元素触发。