2010-11-05 10 views
58

जब कोई उपयोगकर्ता फ़ाइल चुनता है तो मैं एक ईवेंट को आग लगाना चाहता हूं। .change ईवेंट के साथ ऐसा करने से यह कार्य करता है यदि उपयोगकर्ता हर बार फ़ाइल को बदलता है।उसी फ़ाइल के लिए इनपुट प्रकार = फ़ाइल "परिवर्तन" का पता कैसे लगाएं?

लेकिन यदि उपयोगकर्ता एक ही फ़ाइल का चयन करता है तो मैं ईवेंट को आग लगाना चाहता हूं।

  1. उपयोगकर्ता का चयन फ़ाइल A.jpg (घटना की आग)
  2. उपयोगकर्ता का चयन फ़ाइल B.jpg (घटना की आग)
  3. उपयोगकर्ता फ़ाइल B.jpg (ईवेंट को सक्रिय नहीं है, मैं इसे सक्रिय करना चाहते हैं) का चयन

मैं यह कैसे कर सकता हूं?

उत्तर

42

आप इसे चालित कर सकते हैं। फ़ाइल तत्व को निकालें और इसे उसी स्थान पर change ईवेंट पर जोड़ें। यह फाइल पथ को मिटा देगा जिससे हर बार इसे बदलने योग्य बनाया जा सकेगा।

Example on jsFiddle.

या आप बस .prop("value", "") उपयोग कर सकते हैं, this example on jsFiddle देखते हैं।

  • jQuery 1.6+ prop
  • पुराने संस्करण attr

या का उपयोग .val("")

+0

लेकिन यह ओपी की आवश्यकता के लिए काम नहीं करता है, है ना? –

+0

@ पेक्का: बिल्कुल नहीं। लेकिन वह इसे अनुकूलित कर सकता है। मान लीजिए कि उसे फाइल पोस्ट करने की जरूरत है। पोस्ट के बाद वह एक जेएस फ़ंक्शन को कॉल कर सकता है जो नई फ़ाइल चयनकर्ता को हटा देगा और जोड़ देगा। यह करने योग्य है। – BrunoLM

+3

ध्यान रखें कि जब आप '.attr (" value "," ") 'या' .val ("")' ('wagner-leonardi द्वारा सुझाए गए सुझाव) का उपयोग करते हैं तो इंटरनेट एक्सप्लोरर परिवर्तन घटना को आग लगाएगा जबकि क्रोम नहीं करेगा – fadomire

1

आप यहां change आग नहीं बना सकते (सही व्यवहार, क्योंकि कुछ भी नहीं बदला गया)। हालांकि, आप click को भी बांध सकते हैं ... हालांकि यह भी को आग लग सकता है ... हालांकि दोनों के बीच बहुत अधिक मध्य ग्राउंड नहीं है।

$("#fileID").bind("click change", function() { 
    //do stuff 
}); 
+2

@downvoter - टिप्पणी करने की देखभाल? –

+0

ऐसा लगता है कि आप बस अपने शब्दों को दोहरा रहे हैं और '.click() '" पुनः चयन पर आग "नहीं है। – BrunoLM

+0

@ ब्रूनोएलएम - नहीं, यह नहीं है ... लेकिन मुझे लगता है कि आप उस हिस्से को पढ़ते हैं जहां मैं कहता हूं कि आप ऐसा नहीं कर सकते हैं, 'क्लिक' जितना करीब हो उतना करीब है। –

14

मैं यह मिल गया फ़ाइल इनपुट मूल्य onClick समाशोधन और फिर फ़ाइल onChange पोस्टिंग द्वारा काम करने के लिए। यह उपयोगकर्ता को एक ही फ़ाइल को पंक्ति में दो बार चुनने की अनुमति देता है और अभी भी सर्वर पर पोस्ट करने के लिए परिवर्तन ईवेंट आग है। मेरा उदाहरण the jQuery form plugin का उपयोग करता है।

$('input[type=file]').click(function(){ 
    $(this).attr("value", ""); 
}) 
$('input[type=file]').change(function(){ 
    $('#my-form').ajaxSubmit(options);  
}) 
+0

'ऑनक्लिक' 'ऑन चेंज' से पहले आग लगती है, इसलिए यह विधि मेरे लिए बहुत अच्छा काम करती है। – iplus26

+0

यह एक बहुत ही सुरुचिपूर्ण समाधान था और इसे उत्तर के रूप में चिह्नित किया जाना चाहिए। –

4

, मेरे लिए यह काम

<input type="file" onchange="function();this.value=null;return false;"> 
+0

मुझे लगता है कि आप फ़ंक्शन की तरह कुछ मतलब था() {this.value = null; विवरण झूठा है; } – Prozi

52

आप .attr("value", "") की कोशिश की है और काम नहीं किया है (जैसे मैंने किया था) आतंक नहीं

सिर्फ .val("") बजाय करते हैं, और काम करेंगे ठीक

+7

हाहा: डी, ​​मैंने यह देखने के लिए चारों ओर देखा कि क्या आप मेरे बगल में बैठे हैं –

+1

सुपर उत्तर! :) – YdB

+2

यह स्वीकार्य उत्तर होना चाहिए। –

1

आप jQuery

<form enctype='multipart/form-data'> 
    <input onchange="alert(this.value); return false;" type='file'> 
    <br> 
    <input type='submit' value='Upload'> 
</form> 
उपयोग करने के लिए नहीं करना चाहते हैं

यह फ़ायरफ़ॉक्स में ठीक काम करता है, लेकिन क्रोम के लिए आपको चेतावनी के बाद this.value=null; जोड़ने की आवश्यकता है।

0

फ़ाइल इनपुट की files सूची को साफ़ करने के लिए आप form.reset() का उपयोग कर सकते हैं। यह सभी फ़ील्ड को डिफ़ॉल्ट मानों पर रीसेट कर देगा, लेकिन कई मामलों में आप फ़ाइलों को अपलोड करने के लिए केवल एक फॉर्म में इनपुट प्रकार = 'फ़ाइल' का उपयोग कर सकते हैं। इस समाधान में तत्व को क्लोन करने और फिर से ईवेंट को दोबारा जोड़ने की आवश्यकता नहीं है।

philiplehmann

0

के लिए धन्यवाद ठीक है, मैं एक ही मुद्दा था। मैंने परिवर्तन के बजाय "इनपुट" (या ऑनपूट) इवेंट का इस्तेमाल किया और यह आकर्षण की तरह काम करता था।

1

आप आसानी से शून्य पर सेट कर सकते हैं जब भी उपयोगकर्ता नियंत्रण पर क्लिक करता है। अब, यदि उपयोगकर्ता एक ही फ़ाइल का चयन करता है, तो विनिमय ईवेंट ट्रिगर किया जाएगा।

<input id="file" onchange="file_changed(this)" onclick="this.value=null;" type="file" accept="*/*" /> 
+0

मुझे इस तरह के एक समाधान की जरूरत है। यह वास्तव में छोटा है और काम पूरा हो जाता है। अच्छी सोच Mariusz Wiazowski। –

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