2009-02-26 14 views
8

क्या उपयोगकर्ता को आईई में फ़ाइल इनपुट टेक्स्ट बॉक्स में टाइप करने से रोकना संभव है? कारण मैं पूछता हूं कि यदि कोई उपयोगकर्ता उस फ़ाइल में प्रवेश करता है जो फ़ाइल सिस्टम पथ जैसा नहीं दिखता है (उदाहरण के लिए c: ... जैसे कुछ शुरू नहीं होता है) तो जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है तो कुछ भी नहीं होगा।IE में फ़ाइल इनपुट टेक्स्ट बॉक्स को अक्षम कैसे करें?

मैं या तो उपयोगकर्ता को बॉक्स में टाइप करने या फॉर्म के रूप में सामान्य रूप से सबमिट करने की अनुमति नहीं देना चाहूंगा।

मैं ने पाया है कि एक ही सवाल कोई जवाब नहीं के साथ यहाँ कहा गया था: http://www.webmasterworld.com/html/3290988.htm

और इस व्यक्ति को एक हैक के साथ आया था अगर कोई अन्य उपयुक्त जवाब है जो मैं उपयोग कर सकते हैं: http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

संपादित करें: स्पष्टीकरण के लिए - यदि उपयोगकर्ता "ब्राउज़ करें" बटन के बगल में स्थित टेक्स्ट बॉक्स में "फ़ाइल पथ नहीं" टाइप करता है और क्लिक सबमिट करता है, तो IE में कुछ भी नहीं होगा। फॉर्म सबमिट नहीं होगा - आईई < इनपुट प्रकार = "फ़ाइल" > बॉक्स में वास्तविक फ़ाइल पथ नहीं होने पर फॉर्म को सबमिट करने की अनुमति नहीं है।

उत्तर

2

मैंने जमा करने से पहले एक बटन का उपयोग करके और सबमिट करने से पहले मूल्य की जांच करने के लिए जावास्क्रिप्ट का उपयोग करके इसे हल किया।

<input type="file" name="inputFile"> 
<input type="button" onclick="if(fileHasValidPath()) { submitForm(); }" value="Submit"> 

function fileHasValidPath() { 
    if (isIE()) { 
    var inputFile = document.forms[0].inputFile; 
    if (inputFile.value != "" && /^(\w:)|(\\)/.test(inputFile.value)) { 
     alert("File is not a valid file. Please use the Browse button to select a file."); 
     inputFile.select(); 
     inputFile.focus(); 
     return false; 
    } 
    } 

    return true; 
} 

function submitForm() { 
    document.forms[0].submit(); 
} 

मुझे पता है वहाँ अभी भी फ़ाइल के लिए सर्वर साइड सत्यापन होने की जरूरत है लेकिन यह केवल पर सबमिट बटन और हो रहा कुछ भी नहीं देख एक उपयोगकर्ता क्लिक होने से बचने के लिए है। इसके अलावा, यह एक विंडोज ओएस का उपयोग कर आईई मानता है।

+0

आप फ़ॉर्म के ऑनसममिट ईवेंट में सत्यापन विधि भी जोड़ सकते हैं और मानक सबमिट का उपयोग कर सकते हैं। – Ishmael

+2

"इसके अलावा, यह विंडोज ओएस का उपयोग कर आईई मानता है।" -> मैं उस समय की गिनती नहीं कर सकता जब मैंने उन वेब साइटों को शाप दिया है जो इन धारणाओं को बनाते हैं ... –

0

आप

<input ... disabled> 

संपादित का उपयोग नहीं किया जा सका: नहीं, वास्तव में उस प्रस्तुत करने के साथ-साथ होने से बचाता है ... लेकिन एचटीएमएल 4 में जाहिरा तौर पर

<input ... readonly> 

काम करना चाहिए। http://htmlhelp.com/reference/html40/forms/input.html

+0

यह उपयोगकर्ता को फ़ाइल का चयन करने के लिए वास्तव में "ब्राउज़ करें" बटन पर क्लिक करने से अक्षम करता है। मैं अभी भी उन्हें एक फ़ाइल का चयन करने में सक्षम होना चाहता हूँ। –

+0

ओह ... फिर कभी भी ध्यान न दें ;-) –

1

एक तरीका है बटन पर थोड़ा जावास्क्रिप्ट कोड डालना है। विचार बॉक्स को मान्य करने और या तो जमा करना बंद करने या इसे अनुमति देने का विचार है।

हालांकि, आप शायद फ़ाइल सामग्री सर्वर पक्ष को मान्य करने और क्लाइंट को उपयुक्त त्रुटि को प्रस्तुत करने से बेहतर हैं।

2

यह शुरू करना एक बुरा विचार हो सकता है। क्या होगा यदि उपयोगकर्ता विंडोज ओएस का उपयोग नहीं कर रहा है और फ़ाइल /home/user/example.txt फ़ाइल अपलोड करना चाहता है?

इस प्रकार का चेक सर्वर पक्ष को बेहतर ढंग से कार्यान्वित किया जा सकता है।

+0

सर्वर पर नहीं, यह ब्राउज़र पर होना चाहिए ... यदि HTML डिज़ाइन निश्चित रूप से स्वीकृत था। – Javier

+1

उपयोगकर्ता HTML/जावास्क्रिप्ट के साथ छेड़छाड़ कर सकते हैं और अभी भी उन फ़ाइलों को सबमिट कर सकते हैं जो वेब पेज की जांच के अनुरूप नहीं हैं। इसे सुनिश्चित करने का एकमात्र तरीका सर्वर-पक्ष की जांच करना है। गैर-छेड़छाड़ करने वाले उपयोगकर्ताओं को कुछ समय और सर्वर संसाधनों को सहेजने के लिए अभी भी एक क्लाइंट-साइड अच्छा होगा। –

7

इस बारे में कैसे? आप टाइप नहीं कर सकते, या राइट क्लिक और पेस्ट नहीं कर सकते।

<input type="file" name="file" onKeyDown="this.blur()" onContextMenu="return false;"> 
+0

इससे मेरी मदद मिली। धन्यवाद;) – Sandeep

+0

सरल और सुरुचिपूर्ण। काम करता है। +1। –

1

इनपुट प्रकार = फ़ाइल तत्व की मान संपत्ति सुरक्षा समस्या के लिए केवल पढ़ने के लिए है। आप इस संपत्ति को पढ़ सकते हैं और एक चेक कर सकते हैं। यदि यह आपके नियमों के अनुरूप नहीं है, तो आप एक चेतावनी देंगे और व्यक्ति को इसे संशोधित करने दें। दूसरी तरफ बाह्य HTML संपत्ति का उपयोग इसे ओवरराइड करें। उदाहरण के लिए : एचटीएमएल इनपुट फ़ाइल तत्व objInputFileElement कहा जाता है। objInputFileElement।outerHTML = "";

0

मुझे वह विकल्प मिला जो आपकी समस्या का समाधान करता है। contentEditable विकल्प इस प्रकार है:

<input type="file" name="name" contentEditable="false" /> 
0

यहाँ contentEditable विकल्प का एक प्रदर्शन है।

तो, यह फ़ाइल क्षेत्र पर विचार:

$(document).ready(function() { 
    $('#file_field').bind("keydown", function(e) { 
     e.preventDefault(); 
    }); 
}); 

नोट::

<input type="file" id="file_field"> 

मैं jQuery में कुछ इस तरह के साथ काम करने समझ में आ गया इसके बजाय आप keydown का उपयोग करना चाहिए कीप्रेस क्योंकि यह DEL को कवर करता है और बैकस्पेस के साथ ही किसी भी प्रिंट कुंजी।

0

मैं this thread पर मेरे समाधान आधारित:

<input type="file" name="name" contentEditable="false"/> 
संबंधित मुद्दे