मुझे खुशी है कि ब्राउज़र हमें घुसपैठ की स्क्रिप्ट और इस तरह से बचाने के लिए परवाह करते हैं। मैं IE को ब्राउज़र में कुछ डालने से खुश नहीं हूँ जो एक साधारण स्टाइल-फ़िक्स को हैक-अटैक जैसा बनाता है!
मैंने फ़ाइल-इनपुट का प्रतिनिधित्व करने के लिए एक <span> का उपयोग किया है ताकि मैं <div> के बजाय <div> (एक बार फिर IE के कारण) उपयुक्त स्टाइलिंग लागू कर सकूं। अब इस वजह से IE चाहता है कि उपयोगकर्ता को एक मान दिखाने के लिए एक रास्ता है जो सिर्फ उन्हें गार्ड पर रखने की गारंटी देता है और बहुत कम आशंका में है (यदि पूरी तरह से उन्हें डरा नहीं!) ... अधिक IE-CRAP!
किसी भी तरह, उन लोगों के लिए धन्यवाद जिन्होंने यहां स्पष्टीकरण पोस्ट किया है: IE ब्राउज़र सुरक्षा: इनपुट में पथ पथ के लिए "नकली" को लागू करना [प्रकार = "फ़ाइल"] , मैंने एक साथ एक मामूली फिक्सर-अपर डाल दिया है ...
नीचे दिया गया कोड दो चीजें करता है - यह एक lte IE8 बग को ठीक करता है जहां अपलोड क्षेत्र के onBlur तक onChange घटना में आग नहीं लगती है और यह एक साफ फाइलपथ के साथ एक तत्व को अपडेट करता है जो उपयोगकर्ता को डरा नहीं देगा।
// 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);