Tarayıcıların bizi müdahaleci komut dosyalarından ve benzerlerinden kurtarmaya özen gösterdiği için mutluyum. Ben bir saldırı saldırı gibi basit bir stil düzeltme yapan tarayıcıya bir şey koyarak IE memnun değilim!
Dosya girişini temsil etmek için <span> kullandım, böylece <input> yerine <div> 'a uygun stil uygulayabilirim (IE'den bir kez daha). Şimdi bu IE nedeniyle Kullanıcı sadece nöbet ve en azından endişeli onları koymak için garanti edilen bir değer ile bir yol göstermek istiyorum (tamamen korkutmak değil mi?!) ... DAHA IE-CRAP!
Her neyse, açıklamayı buraya gönderenler sayesinde: IE Tarayıcı Güvenliği: Girişe [type = "file"] dosya yoluna "fakepath" ekleyerek , küçük bir fixer-üst koydum ...
Aşağıdaki kod iki şey yapar - yükleme alanının onBlur'una kadar onChange olayının başlatılmadığı bir lte IE8 hatasını düzeltir ve kullanıcıyı korkutmayacak temizlenmiş bir dosyayoluyla bir öğeyi günceller.
// self-calling lambda to for jQuery shorthand "$" namespace
(function($){
// document onReady wrapper
$().ready(function(){
// check for the nefarious IE
if($.browser.msie) {
// capture the file input fields
var fileInput = $('input[type="file"]');
// add presentational <span> tags "underneath" all file input fields for styling
fileInput.after(
$(document.createElement('span')).addClass('file-underlay')
);
// bind onClick to get the file-path and update the style <div>
fileInput.click(function(){
// need to capture $(this) because setTimeout() is on the
// Window keyword 'this' changes context in it
var fileContext = $(this);
// capture the timer as well as set setTimeout()
// we use setTimeout() because IE pauses timers when a file dialog opens
// in this manner we give ourselves a "pseudo-onChange" handler
var ieBugTimeout = setTimeout(function(){
// set vars
var filePath = fileContext.val(),
fileUnderlay = fileContext.siblings('.file-underlay');
// check for IE's lovely security speil
if(filePath.match(/fakepath/)) {
// update the file-path text using case-insensitive regex
filePath = filePath.replace(/C:\\fakepath\\/i, '');
}
// update the text in the file-underlay <span>
fileUnderlay.text(filePath);
// clear the timer var
clearTimeout(ieBugTimeout);
}, 10);
});
}
});
})(jQuery);