JQuery का उपयोग करके अपलोड बॉक्स (ब्राउज बटन) को ट्रिगर करने की कोशिश कर रहा हूं।
मैंने अभी जो तरीका आजमाया है वह है:
$('#fileinput').trigger('click');
लेकिन यह काम नहीं करता है। कृपया मदद कीजिए। धन्यवाद।
JQuery का उपयोग करके अपलोड बॉक्स (ब्राउज बटन) को ट्रिगर करने की कोशिश कर रहा हूं।
मैंने अभी जो तरीका आजमाया है वह है:
$('#fileinput').trigger('click');
लेकिन यह काम नहीं करता है। कृपया मदद कीजिए। धन्यवाद।
जवाबों:
यह सुरक्षा प्रतिबंध के कारण है।
मुझे पता चला कि सुरक्षा प्रतिबंध केवल तभी <input type="file"/>निर्धारित किया जाता है जब display:none;या के लिए निर्धारित किया जाता है visbilty:hidden।
तो मैं इसे स्थिति की कोशिश की व्यूपोर्ट के बाहर की स्थापना करके position:absoluteऔर top:-100px;यह काम करता है और देखा।
http://jsfiddle.net/DSARd/1/ देखें
इसे हैक कहते हैं।
उम्मीद है वह आप के काम आएगा।
left: -100px;। आप कभी नहीं जान सकते कि पेज कितने समय का हो सकता है
यह मेरे लिए काम किया:
जे एस:
$('#fileinput').trigger('click');
HTML:
<div class="hiddenfile">
<input name="upload" type="file" id="fileinput"/>
</div>
सीएसएस:
.hiddenfile {
width: 0px;
height: 0px;
overflow: hidden;
}
>>> क्रॉस-ब्राउज़र काम करने वाला एक और: <<<
आइडिया यह है कि आप अपने कस्टम बटन पर एक अदृश्य विशाल "ब्राउज" बटन को ओवरले करें। इसलिए जब उपयोगकर्ता आपके कस्टम बटन पर क्लिक करता है, तो वह वास्तव में देशी इनपुट फ़ील्ड के "ब्राउज" बटन पर क्लिक करता है।
जेएस फिडल: http://jsfiddle.net/5Rh7b/
HTML:
<div id="mybutton">
<input type="file" id="myfile" name="upload"/>
Click Me!
</div>
सीएसएस:
div#mybutton {
/* IMPORTANT STUFF */
overflow: hidden;
position: relative;
/* SOME STYLING */
width: 50px;
height: 28px;
border: 1px solid green;
font-weight: bold
background: red;
}
div#mybutton:hover {
background: green;
}
input#myfile {
height: 30px;
cursor: pointer;
position: absolute;
top: 0px;
right: 0px;
font-size: 100px;
z-index: 2;
opacity: 0.0; /* Standard: FF gt 1.5, Opera, Safari */
filter: alpha(opacity=0); /* IE lt 8 */
-ms-filter: "alpha(opacity=0)"; /* IE 8 */
-khtml-opacity: 0.0; /* Safari 1.x */
-moz-opacity: 0.0; /* FF lt 1.5, Netscape */
}
जावास्क्रिप्ट:
$(document).ready(function() {
$('#myfile').change(function(evt) {
alert($(this).val());
});
});
heightबदलने का सुझाव दिया गया हैheight: 100%
आप LABEL तत्व पूर्व का उपयोग कर सकते हैं।
<div>
<label for="browse">Click Me</label>
<input type="file" id="browse" name="browse" style="display: none">//
</div>
यह इनपुट फ़ाइल को ट्रिगर करेगा
मैंने इसे IE8 +, हाल के एफएफ और क्रोम में काम (= परीक्षण) किया है:
$('#uploadInput').focus().trigger('click');
कुंजी पहले ध्यान केंद्रित कर रही है क्लिक को फायर करने (अन्यथा क्रोम इसे अनदेखा करता है)।
नोट: आप अपने इनपुट को प्रदर्शित और दृश्यमान होने के लिए आवश्यक करते हैं (जैसा कि, नहीं display:noneऔर नहीं visibility:hidden)। मैं सुझाव देता हूं (जैसा कि कई अन्य पहले है) पूरी तरह से इनपुट की स्थिति के लिए और इसे ऑफ स्क्रीन फेंक दें।
#uploadInput {
position: absolute;
left: -9999px;
}
मेरी बेला बाहर की जाँच करें।
http://jsfiddle.net/mohany2712/vaw8k/
.uploadFile {
visibility: hidden;
}
#uploadIcon {
cursor: pointer;
}
<body>
<div class="uploadBox">
<label for="uploadFile" id="uploadIcon">
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Icon_-_upload_photo_2.svg/512px-Icon_-_upload_photo_2.svg.png" width="20px" height="20px"/>
</label>
<input type="file" value="upload" id="uploadFile" class="uploadFile" />
</div>
</body>
छिपने के बाद फ़ाइल इनपुट तत्व को अनदेखा किए जाने के बारे में adardesign ने इसे nailed किया। मैंने कई लोगों को तत्व के आकार को 0 में स्थानांतरित करने या स्थिति और अतिप्रवाह समायोजन के साथ सीमा से बाहर धकेलने पर भी ध्यान दिया। ये सभी महान विचार हैं।
एक वैकल्पिक तरीका जो पूरी तरह से अच्छी तरह से काम करता है वह सिर्फ अपारदर्शिता को 0 पर सेट करना है । तब आप हमेशा इसे अन्य तत्वों को ऑफसेट करने से रखने की स्थिति निर्धारित कर सकते हैं को कि छुपाता है। किसी भी दिशा में लगभग 10K पिक्सेल के तत्व को स्थानांतरित करना बस थोड़ा अनावश्यक लगता है।
यहाँ उन लोगों के लिए एक छोटा सा उदाहरण है जो एक चाहते हैं:
input[type='file']{
position:absolute;
opacity:0;
/* For IE8 "Keep the IE opacity settings in this order for max compatibility" */
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
/* For IE5 - 7 */
filter: alpha(opacity=0);
}
बस जिज्ञासा के लिए, आप कुछ ऐसा कर सकते हैं, जैसे आप डॉम ट्री से जोड़कर, डायनामिकली अपलोड फॉर्म और इनपुट फ़ाइल बनाकर चाहते हैं:
$('.your-button').on('click', function() {
var uploadForm = document.createElement('form');
var fileInput = uploadForm.appendChild(document.createElement('input'));
fileInput.type = 'file';
fileInput.name = 'images';
fileInput.multiple = true;
fileInput.click();
});
DOM पर uploadForm को जोड़ने की आवश्यकता नहीं है।
सही कोड:
<style>
.upload input[type='file']{
position: absolute;
float: left;
opacity: 0; /* For IE8 "Keep the IE opacity settings in this order for max compatibility" */
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; /* For IE5 - 7 */
filter: alpha(opacity=0);
width: 100px; height: 30px; z-index: 51
}
.upload input[type='button']{
width: 100px;
height: 30px;
z-index: 50;
}
.upload input[type='submit']{
display: none;
}
.upload{
width: 100px; height: 30px
}
</style>
<div class="upload">
<input type='file' ID="flArquivo" onchange="upload();" />
<input type="button" value="Selecionar" onchange="open();" />
<input type='submit' ID="btnEnviarImagem" />
</div>
<script type="text/javascript">
function open() {
$('#flArquivo').click();
}
function upload() {
$('#btnEnviarImagem').click();
}
</script>
यह उद्देश्य और डिजाइन के आधार पर है। यह एक सुरक्षा मुद्दा है।
वास्तव में, मुझे इसके लिए एक बहुत आसान तरीका पता चला, जो है:
$('#fileinput').show().trigger('click').hide();
इस तरह, आपके फ़ाइल इनपुट फ़ील्ड में कोई भी नहीं पर css संपत्ति का प्रदर्शन हो सकता है और फिर भी व्यापार जीत सकता है :)
जवाब देने में बहुत देर हो चुकी है लेकिन मुझे लगता है कि यह न्यूनतम सेटअप सबसे अच्छा है। मैं भी उसी की तलाश में हूं।
<div class="btn-file">
<input type="file" class="hidden-input">
Select your new picture
</div>
// सीएसएस
.btn-file {
display: inline-block;
padding: 8px 12px;
cursor: pointer;
background: #89f;
color: #345;
position: relative;
overflow: hidden;
}
.btn-file input[type=file] {
position: absolute;
top: 0;
right: 0;
min-width: 100%;
min-height: 100%;
filter: alpha(opacity=0);
opacity: 0;
cursor: inherit;
display: block;
}
यह एक बहुत पुराना प्रश्न है, लेकिन दुर्भाग्य से यह मुद्दा अभी भी प्रासंगिक है और इसके समाधान की आवश्यकता है।
(सुपरइंडली सिंपल) समाधान जो मैं लेकर आया हूं, वह वास्तविक फ़ाइल इनपुट फ़ील्ड को "छिपाने" और इसे एक LABEL टैग (बूटस्ट्रैप और एचटीएमएल 5 पर आधारित हो सकता है, एन्हांसमेंट के लिए) के साथ लपेटना है।
See here:उदाहरण कोड यहाँ
इस तरह, वास्तविक फ़ाइल इनपुट फ़ील्ड अदृश्य है और आप जो कुछ भी देखते हैं वह अनुकूलित "बटन" है जो वास्तव में एक संशोधित LABEL तत्व है। जब आप इस LABEL एलिमेंट पर क्लिक करते हैं, तो किसी फ़ाइल को चुनने के लिए विंडो ऊपर आती है और आपके द्वारा चुनी गई फ़ाइल वास्तविक फ़ाइल इनपुट फ़ील्ड में चली जाएगी।
उसके ऊपर, आप अपनी इच्छानुसार रूप और व्यवहार में हेरफेर कर सकते हैं (उदाहरण के लिए: फ़ाइल इनपुट फ़ाइल से चयनित फ़ाइल का नाम प्राप्त करें, चयनित होने के बाद, और इसे कहीं पर दिखाएं। LABEL तत्व स्वचालित रूप से ऐसा नहीं करता है। बेशक। मैं आमतौर पर इसे LABEL के अंदर रखता हूं, जैसा कि इसकी पाठ सामग्री)।
हालांकि सावधान! इस के रूप और व्यवहार का हेरफेर आप जो भी सोच सकते हैं और सोच सकते हैं, उस तक सीमित है। ;-) ;-)
मैंने एक साधारण $ (...) पर क्लिक किया (); JQuery के साथ 1.6.1
मुझे कस्टम क्लाइंट साइड सत्यापन के लिए समस्या थी, <input type="file"/>जबकि इसे ट्रिगर करने के लिए एक नकली बटन का उपयोग करके और @Gillailla Bodi के समाधान ने मेरे लिए काम किया ( opacity: 0;क्रोम पर भी )
$("#MyForm").on("click", "#fake-button", function () {
$("#uploadInput").focus().trigger("click");
});
और अपलोड इनपुट के लिए सीएसएस शैली
#uploadInput {
opacity: 0.0;
filter: alpha(opacity=0); /* IE lt 8 */
-ms-filter: "alpha(opacity=0)"; /* IE 8 */
-khtml-opacity: 0.0; /* Safari 1.x */
-moz-opacity: 0.0;
}
यह कोशिश करो, यह एक हैक है। स्थिति: निरपेक्ष क्रोम के लिए है और ट्रिगर ('परिवर्तन') IE के लिए है।
var hiddenFile = $("<input type=\"file\" name=\"file\" id=\"file1\" style=\"position:absolute;left:-9999px\" />");
$('body').append(hiddenFile);
$('#aPhotoUpload').click(function () {
hiddenFile.trigger('click');
if ($.browser.msie)
hiddenFile.trigger('change');
});
hiddenFile.change(function (e) {
alert('TODO');
});
$.browserjQuery के नए संस्करणों में चित्रित किया गया है
यह संभवतः क्रॉस ब्राउज़र के मुद्दों को ध्यान में रखते हुए सबसे अच्छा जवाब है।
सीएसएस:
#file {
opacity: 0;
width: 1px;
height: 1px;
}
जे एस:
$(".file-upload").on('click',function(){
$("[name='file']").click();
});
HTML:
<a class="file-upload">Upload</a>
<input type="file" name="file">
मुझे लगता है कि मैं आपकी समस्या को समझता हूं, क्योंकि मेरे पास एक समान है। तो टैग <label>में एट्रीब्यूट है, आप इस एट्रिब्यूट का उपयोग अपने इनपुट को टाइप = "फाइल" से जोड़ने के लिए कर सकते हैं। लेकिन अगर आप इस लेबल का उपयोग करके इसे सक्रिय नहीं करना चाहते हैं क्योंकि आपके लेआउट के कुछ नियम, आप इस तरह से कर सकते हैं।
$(document).ready(function(){
var reference = $(document).find("#main");
reference.find(".js-btn-upload").attr({
formenctype: 'multipart/form-data'
});
reference.find(".js-btn-upload").click(function(){
reference.find("label").trigger("click");
});
});
.hide{
overflow: hidden;
visibility: hidden;
/*Style for hide the elements, don't put the element "out" of the screen*/
}
.btn{
/*button style*/
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
<div id="main">
<form enctype"multipart/formdata" id="form-id" class="hide" method="post" action="your-action">
<label for="input-id" class="hide"></label>
<input type="file" id="input-id" class="hide"/>
</form>
<button class="btn js-btn-upload">click me</button>
</div>
बेशक आप इसे अपने उद्देश्य और लेआउट के लिए अनुकूलित करेंगे, लेकिन यह अधिक आसान तरीका है जिसे मैं इसे काम करना जानता हूं !!
Guillaume Bodi के जवाब के आधार पर मैंने ऐसा किया:
$('.fileinputbar-button').on('click', function() {
$('article.project_files > header, article.upload').show();
$('article.project_files > header, article.upload header').addClass('active');
$('.file_content, article.upload .content').show();
$('.fileinput-button input').focus().click();
$('.fileinput-button').hide();
});
जिसका अर्थ है कि इसे शुरू करने के लिए छिपाया गया है और फिर ट्रिगर के लिए प्रदर्शित किया गया है, फिर तुरंत फिर से छिपा हुआ है।