2010-04-27 16 views
61

मैं अपने सरल और सुरुचिपूर्ण एपीआई के साथ jQuery 100% को गले लगाने की कोशिश कर रहा हूं लेकिन मैं एपीआई और सीधे एचटीएमएल के बीच असंगतता में भाग गया हूं कि मैं काफी नहीं कर सकता अंदाजा लगाओ।इनपुट प्रकार = "फ़ाइल" पर jQuery परिवर्तन विधि

मेरे पास एक AJAX फ़ाइल अपलोडर स्क्रिप्ट है (जो सही ढंग से कार्य करती है) कि मैं प्रत्येक बार फ़ाइल इनपुट मान में परिवर्तन करना चाहता हूं। यहाँ मेरे कार्य कोड है:

<input type="file" size="45" name="imageFile" id="imageFile" onchange="uploadFile()"> 

जब मैं एक jQuery कार्यान्वयन के लिए onchange घटना कन्वर्ट:

$('#imageFile').change(function(){ uploadFile(); }); 

परिणाम समान नहीं है। onchange विशेषता uploadFile() फ़ंक्शन को किसी भी समय मूल्य के रूप में बदला जाता है जैसा कि अपेक्षित है। लेकिन jQuery एपीआई .change() इवेंट हैंडलर के साथ, ईवेंट केवल पहली बार एक मूल्य बदल जाता है। उसके बाद किसी भी मूल्य परिवर्तन को नजरअंदाज कर दिया जाता है। यह मेरे लिए गलत लगता है लेकिन निश्चित रूप से यह jQuery द्वारा एक निरीक्षण नहीं हो सकता है, है ना?

क्या किसी और को भी एक ही समस्या का सामना करना पड़ा है और क्या आपके पास उपर्युक्त वर्णन के अलावा समस्या का समाधान या समाधान है?

+1

क्या आप मौके से आईई का उपयोग कर रहे हैं? – spig

+0

मैं आम तौर पर प्लेग की तरह आईई से बचता हूं। एलओएल लेकिन गंभीरता से, मैं फ़ायरबॉक्स में विकसित हूं ताकि मैं फायरबग और इसकी उत्कृष्टता का लाभ उठा सकूं और फिर आईई, क्रोम और सफारी में परीक्षण कर सकूं। तुमने क्यों पूछा? .live() विधि (नीचे जवाब) मेरे लिए इस मुद्दे को हल किया। – gurun8

+0

@ gurun8 आपके अपलोडफाइल() कोई पैरामीटर क्यों नहीं है? मैं इस तरह एक एएसपी.नेट एमवीसी विधि को कॉल करना चाहता हूं, लेकिन जावास्क्रिप्ट को उस फ़ाइल को भेजना चाहिए जो पैरामीटर –

उत्तर

81

AJAX अपलोडर आपके इनपुट तत्व को रीफ्रेश कर रहा है? यदि ऐसा है तो आपको .live() विधि का उपयोग करने पर विचार करना चाहिए।

$('#imageFile').live('change', function(){ uploadFile(); }); 

अद्यतन:

jQuery से

1.7+ आप अब .on का उपयोग करना चाहिए()

$(parent_element_selector_here or document).on('change','#imageFile' , function(){ uploadFile(); }); 
+4

के रूप में अपलोड करना चाहता है अद्यतन –

+5

के लिए धन्यवाद यह आईई के लिए काम करता है ???? –

+1

Jquery में बाध्यकारी परिवर्तन घटना IE <9 में काम नहीं करेगी, इसके बजाय मूल आदान-प्रदान का उपयोग करें। – Sanjeev

10

मैं IE8 + फ़ाइल इनपुट प्रकार के लिए एक jQuery ईवेंट हैंडलर जोड़कर काम करने के लिए नहीं मिल सका ।

<input type='file' onchange='getFilename(this)'/> 

function getFileName(elm) { 
    var fn = $(elm).val(); 
    .... 
} 
56

jQuery 1.7 के रूप में, .live() विधि बहिष्कृत हो गई है: मैं ओल्ड-स्कूल जाने के लिए और इनपुट टैग के लिए onchange="" विशेषता जोड़ने के लिए किया था। ईवेंट हैंडलर संलग्न करने के लिए .on() का उपयोग करें। JQuery के पुराने संस्करणों के उपयोगकर्ताओं को .delegate() को प्राथमिकता में .live() में उपयोग करना चाहिए। संदर्भ: http://api.jquery.com/on/

$('#imageFile').on("change", function(){ uploadFile(); }); 
+1

लाइव() के बहिष्कार पर अच्छा पकड़, लेकिन आपके द्वारा दिखाया गया फॉर्म काम नहीं करता है। @LuisMelgrati द्वारा दिखाया गया फॉर्म काम करता है। और वास्तव में, जो पृष्ठ आप लिंक करते हैं वह इस फ़ॉर्म के प्रतिस्थापन के रूप में दूसरा रूप देता है। – PhiLho

+0

धन्यवाद @ फिल्हो, बस उस लिंक को मिला जो मैं संदर्भित कर रहा था। Live() not .on() –

संबंधित मुद्दे