Dalam JavaScript, bisakah saya membuat api acara "klik" secara terprogram untuk elemen input file?

261

Saya ingin membuat acara klik diaktifkan pada <input type="file">tag secara terprogram.

Memanggil klik saja () tampaknya tidak melakukan apa-apa atau setidaknya tidak memunculkan dialog pemilihan file.

Saya telah bereksperimen dengan menangkap acara menggunakan pendengar dan mengarahkan kembali acara tersebut, tetapi saya belum bisa mendapatkannya untuk benar-benar melakukan acara seperti seseorang mengkliknya.

pengguna28655
sumber
1
Acara klik yang Anda picu harus dipanggil dalam acara klik yang dimulai oleh pengguna, atau tidak akan berfungsi.
Umagon

Jawaban:

79

Anda tidak dapat melakukan itu di semua browser, seharusnya IE melakukannya mengizinkannya, tetapi Mozilla dan Opera mengizinkannya.

Ketika Anda menulis pesan di GMail, fitur 'lampirkan file' diterapkan satu cara untuk IE dan browser apa pun yang mendukung ini, dan kemudian diimplementasikan cara lain untuk Firefox dan browser yang tidak.

Saya tidak tahu mengapa Anda tidak bisa melakukannya, tetapi satu hal yang merupakan risiko keamanan, dan yang tidak boleh Anda lakukan di browser apa pun, adalah secara terprogram mengatur nama file pada elemen File HTML.

Jason Bunting
sumber
1
Drat. Yah saya tentu mengerti bahwa itu dapat dieksploitasi. Apakah ini didokumentasikan di mana saja? Saya kira itu akan diterapkan oleh setiap browser?
user28655
Memperbarui jawaban saya menjadi lebih benar daripada jawaban sebelumnya - intinya sama, tetapi klarifikasi akan membantu sedikit. Orang ini mengalami masalah yang sama: bytes.com/forum/thread542877.html
Jason Bunting
Terima kasih Tuhan, FF5 mengizinkan klik ini
rshimoda
2
Untuk mengklarifikasi komentar di atas: Chrome baru-baru ini diubah untuk memeriksa apakah inputelemen file terlihat. Memicu clickmetode ini berfungsi, termasuk di konsol, jika elemen dapat dilihat.
jwadsack
2
@Otvazhnii - kawan, jawaban ini (yang Anda katakan salah) berumur 10 tahun - tidak heran itu tidak benar! (Saya tidak tahu pasti, saya mengambil kata-kata Anda untuk itu). : P
Jason Bunting
257

Saya telah mencari solusi sepanjang hari ini. Dan ini adalah kesimpulan yang saya buat:

  1. Untuk alasan keamanan, Opera dan Firefox tidak memungkinkan untuk memicu input file.
  2. Satu-satunya alternatif yang nyaman adalah membuat input file "tersembunyi" (menggunakan opacity, bukan "hidden" atau "display: none"!) Dan kemudian membuat tombol "di bawah" itu. Dengan cara ini tombol terlihat tetapi pada klik pengguna sebenarnya mengaktifkan input file.

Semoga ini membantu! :)

<div style="display: block; width: 100px; height: 20px; overflow: hidden;">
<button style="width: 110px; height: 30px; position: relative; top: -5px; left: -5px;"><a href="javascript: void(0)">Upload File</a></button>
<input type="file" id="upload_input" name="upload" style="font-size: 50px; width: 120px; opacity: 0; filter:alpha(opacity=0);  position: relative; top: -40px;; left: -20px" />
</div>
Romas
sumber
6
solusi ini sangat bagus. Tidak yakin mengapa itu diabaikan dan tidak dimuliakan. Ini bukan * persis apa yang ditanyakan oleh pertanyaan, tetapi ini adalah pekerjaan yang bagus. Sudahkah Anda menemukan itu tidak kompatibel dengan browser apa pun? Saya tidak punya waktu untuk mengerjakan semua 10+ rasa yang relevan untuk diuji.
Yevgeny Simkin
1
Terima kasih atas jawaban ini, luar biasa: D
mario.tco
Solusi bagus Bekerja di peramban seluler android juga.
gstroup
1
Ini tidak benar, Lihat tanggapan Didier di bawah ini. Klik terprogram harus berasal dari konteks tindakan pengguna - seperti pada penangan klik tombol lain. Kemudian berfungsi dengan baik, tidak perlu memiliki elemen overflow.
smok
1
Satu-satunya masalah dengan ini, adalah bahwa jika Anda ingin mengubah gaya tombol di hover, Anda tidak bisa. Yang berarti jika Anda ingin terlihat seperti semua tombol lain di aplikasi Anda, Anda tidak bisa.
Vincent
68

Anda dapat mem-klik () pada browser apa saja tetapi beberapa browser membutuhkan elemen untuk terlihat dan fokus. Inilah contoh jQuery:

$('#input_element').show();
$('#input_element').focus();
$('#input_element').click();
$('#input_element').hide();

Ia bekerja dengan hide sebelum click()tetapi saya tidak tahu apakah itu berfungsi tanpa memanggil metode show. Belum pernah mencoba ini di Opera, saya diuji pada IE / FF / Safari / Chrome dan berhasil. Saya harap ini akan membantu.

Florin Mogos
sumber
51
Terima kasih telah berbagi. Kalau-kalau Anda tidak tahu - Anda dapat menggunakan chaining di jQuery: $(...).show().focus().click().hide();:)
pimvdb
1
@ pimvdb: sejauh yang saya uji, solusi Anda hanya berfungsi di Chrome.
Menunggu Long
1
@ Hoàng Long: Maksud Anda solusi rantai atau Florin Mogos? Saya tidak percaya chaining akan membuat perbedaan lintas browser.
pimvdb
1
@ HoàngLong Ini berfungsi untuk saya di IE 8 dan 9, Chrome, Safari, dan Firefox terbaru.
Sami Samhuri
2
Aneh. Saat saya uji, Tidak berfungsi di bawah Chrome di Ubuntu.
sandrew
29

INI MUNGKIN: Di bawah FF4 +, Opera?, Chrome: tetapi:

  1. inputElement.click()harus dipanggil dari konteks aksi pengguna! (bukan konteks eksekusi skrip)

  2. <input type="file" />harus terlihat ( inputElement.style.display !== 'none') (Anda dapat menyembunyikannya dengan visibilitas atau sesuatu yang lain, tetapi bukan properti "display")

Didier Ghys
sumber
Ini menyelesaikannya untuk saya. Saya harus menambahkan javascript ke onclickatribut alih-alih mengikat ke acara.
jasonlfunk
1
Memilih satu-satunya solusi yang masuk akal. Metode overflow jelek.
smok
Ha! Saya tahu pasti ada hubungannya dengan konteks! Saya telah mengamati bahwa panggilan inputElement.click()dari dalam peristiwa keydown (pintas untuk melampirkan file) berfungsi, tetapi memanggilnya dalam batas waktu atau panggilan balik ajax TIDAK. Terpilih.
brettjonesdev
9
Btw apakah ada yang punya sumber daya lebih lanjut tentang "konteks tindakan pengguna" versus "konteks eksekusi skrip"? Segala sesuatu yang saya lihat ketika melakukan pencarian berkaitan dengan konteks eksekusi dan this. : /
brettjonesdev
@ bretjonesdev Saya pikir itu berarti perlu dijalankan di dalam event handler yang diprakarsai pengguna, seperti event handler klik, versus janji, batas waktu, atau acara lain yang diprakarsai oleh non-pengguna.
Alex Guerra
10

Bagi mereka yang mengerti bahwa Anda harus menampar formulir yang tidak terlihat di atas tautan, tetapi terlalu malas untuk menulis, saya menulisnya untuk Anda. Ya, bagi saya, tetapi mungkin juga berbagi. Komentar diterima.

HTML (Di Suatu Tempat):

<a id="fileLink" href="javascript:fileBrowse();" onmouseover="fileMove();">File Browse</a>

HTML (Di tempat yang tidak Anda pedulikan):

<div id="uploadForm" style="filter:alpha(opacity=0); opacity: 0.0; width: 300px; cursor: pointer;">
    <form method="POST" enctype="multipart/form-data">
        <input type="file" name="file" />
    </form>
</div>

JavaScript:

function pageY(el) {
    var ot = 0;
    while (el && el.offsetParent != el) {
        ot += el.offsetTop ? el.offsetTop : 0;
        el = el.offsetParent;
    }
    return ot;
}

function pageX(el) {
    var ol = 0;
    while (el && el.offsetParent != el) {
        ol += el.offsetLeft ? el.offsetLeft : 0;
        el = el.offsetParent;
    }
    return ol;
}

function fileMove() {
    if (navigator.appName == "Microsoft Internet Explorer") {
        return; // Don't need to do this in IE. 
    }
    var link = document.getElementById("fileLink");
    var form = document.getElementById("uploadForm");
    var x = pageX(link);
    var y = pageY(link);
    form.style.position = 'absolute';
    form.style.left = x + 'px';
    form.style.top = y + 'px';
}

function fileBrowse() {
    // This works in IE only. Doesn't do jack in FF. :( 
    var browseField = document.getElementById("uploadForm").file;
    browseField.click();
}
McTrafik
sumber
7

Jika Anda ingin clickmetode ini berfungsi di Chrome, Firefox, dll, terapkan gaya berikut ke file input Anda. Ini akan disembunyikan dengan sempurna, seperti Anda melakukandisplay: none;

#fileInput {
    visibility: hidden;
    position: absolute;
    top: 0;
    left: -5000px;
}

Sesederhana itu, saya mengujinya berfungsi!

Linblow
sumber
Saya suka cara ini yang terbaik karena beberapa browser lama tidak akan melakukan apa pun pada inputElement.click () jika disembunyikan.
Nick
Mengapa tidak hanya mengatur heightdan widthke 0?
Solomon Ucko
5
$(document).one('mousemove', function() { $(element).trigger('click') } );

Bekerja untuk saya ketika saya mengalami masalah yang sama, itu adalah eRube Goldberg biasa.

Leon Creatini
sumber
4

SOLUSI KERJA

Izinkan saya menambahkan ke posting lama ini, solusi yang saya gunakan untuk bekerja yang mungkin bekerja di mungkin 80% atau lebih dari semua browser baik baru maupun lama.

Solusinya kompleks namun sederhana. Langkah pertama adalah menggunakan CSS dan menyamarkan tipe file input dengan "elemen-bawah" yang muncul karena memiliki opacity 0. Langkah selanjutnya adalah menggunakan JavaScript untuk memperbarui labelnya sesuai kebutuhan.

HTML ID hanya disisipkan jika Anda ingin cara cepat untuk mengakses elemen tertentu, kelas-kelasnya, adalah suatu keharusan karena berkaitan dengan CSS yang mengatur seluruh proses ini

<div class="file-input wrapper">
    <input id="inpFile0" type="file" class="file-input control" />
    <div class="file-input content">
        <label id="inpFileOutput0" for="inpFileButton" class="file-input output">Click Here</label>
        <input id="inpFileButton0" type="button" class="file-input button" value="Select File" />
    </div>
</div>

CSS Perlu diingat, pewarnaan dan gaya font dan semacamnya benar-benar pilihan Anda, jika Anda menggunakan CSS dasar ini, Anda selalu dapat menggunakan tanda setelah-akhir hingga gaya sesuka Anda, ini ditunjukkan dalam jsFiddle yang terdaftar di bagian akhir.

.file-test-area {
    border: 1px solid;
    margin: .5em;
    padding: 1em;
}
.file-input {
    cursor: pointer !important;
}
.file-input * {
    cursor: pointer !important;
    display: inline-block;
}
.file-input.wrapper {
    display: inline-block;
    font-size: 14px;
    height: auto;
    overflow: hidden;
    position: relative;
    width: auto;
}
.file-input.control {
    -moz-opacity:0 ;
    filter:alpha(opacity: 0);
    opacity: 0;

    height: 100%;
    position: absolute;
    text-align: right;
    width: 100%;
    z-index: 2;
}
.file-input.content {
    position: relative;
    top: 0px;
    left: 0px;
    z-index: 1;
}
.file-input.output {
    background-color: #FFC;
    font-size: .8em;
    padding: .2em .2em .2em .4em;
    text-align: center;
    width: 10em;
}
.file-input.button {
    border: none;
    font-weight: bold;
    margin-left: .25em;
    padding: 0 .25em;
}

JavaScript Murni dan benar, namun, beberapa browser TUA (sudah pensiun) mungkin masih mengalami masalah dengan itu (seperti Netscrape 2!)

var inp = document.getElementsByTagName('input');
for (var i=0;i<inp.length;i++) {
    if (inp[i].type != 'file') continue;
    inp[i].relatedElement = inp[i].parentNode.getElementsByTagName('label')[0];
    inp[i].onchange /*= inp[i].onmouseout*/ = function () {
        this.relatedElement.innerHTML = this.value;
    };
};

Contoh jsFiddle yang berfungsi

SpYk3HH
sumber
4

Berhasil :

Untuk alasan keamanan pada Firefox dan Opera, Anda tidak dapat memecat klik pada input file, tetapi Anda dapat mensimulasikan dengan MouseEvents:

<script>
click=function(element){
    if(element!=null){
        try {element.click();}
        catch(e) {
            var evt = document.createEvent("MouseEvents");
            evt.initMouseEvent("click",true,true,window,0,0,0,0,0,false,false,false,false,0,null);
            element.dispatchEvent(evt);
            }
        }
    };
</script>

<input type="button" value="upload" onclick="click(document.getElementById('inputFile'));"><input type="file" id="inputFile" style="display:none">
kop
sumber
1
Perhatikan bahwa createEvent()dan initMouseEvent()sekarang sudah usang.
Alexis Wilke
4

Saya tahu ini sudah lama, dan semua solusi ini adalah peretasan di sekitar tindakan pencegahan keamanan browser dengan nilai nyata.

Yang mengatakan, pada hari ini, fileInput.click () berfungsi di Chrome saat ini (36.0.1985.125 m) dan Firefox ESR saat ini (24.7.0), tetapi tidak di IE saat ini (11.0.9600.17207). Overlay bidang file dengan opacity 0 di atas tombol berfungsi, tapi saya ingin elemen tautan sebagai pemicu yang terlihat, dan melayang menggarisbawahi tidak cukup berfungsi di browser apa pun. Ini menyala kemudian menghilang, mungkin browser memikirkan apakah hover styling benar-benar berlaku atau tidak.

Tapi saya memang menemukan solusi yang berfungsi di semua browser itu. Saya tidak akan mengklaim telah menguji setiap versi setiap browser, atau saya tahu itu akan terus bekerja selamanya, tetapi tampaknya memenuhi kebutuhan saya sekarang.

Sederhana saja: Posisikan field input file di luar layar (position: absolute; top: -5000px), letakkan elemen label di sekitarnya, dan memicu klik pada label, alih-alih bidang file itu sendiri.

Perhatikan bahwa tautan memang perlu ditulis untuk memanggil metode klik label, itu tidak melakukannya secara otomatis, seperti ketika Anda mengklik teks di dalam elemen label. Tampaknya elemen tautan menangkap klik, dan itu tidak sampai ke label.

Perhatikan juga bahwa ini tidak memberikan cara untuk menampilkan file yang dipilih saat ini, karena bidangnya tidak aktif. Saya ingin mengirimkan segera ketika file dipilih, jadi itu bukan masalah bagi saya, tetapi Anda akan memerlukan pendekatan yang agak berbeda jika situasinya berbeda.

enigment
sumber
Oke, pada tag tombol, onclick = "filetag.click ()" tidak berfungsi dengan IE 9 dan 10 (tetapi berfungsi dengan IE 11, Firefox 4/10/26/27/28, Chrome / Chromium 31/32/33 / 36, Safari 7, Opera 23). Tetapi, jika Anda menggunakan label untuk = "id-of-file-input" (tanpa onlick), ia bekerja untuk IE 9/10/11.
luigifab
4

JS Fiddle: http://jsfiddle.net/eyedean/1bw357kw/

popFileSelector = function() {
    var el = document.getElementById("fileElem");
    if (el) {
        el.click();  
    }
};

window.popRightAway = function() {
    document.getElementById('log').innerHTML += 'I am right away!<br />';
    popFileSelector();
};

window.popWithDelay = function() {
    document.getElementById('log').innerHTML += 'I am gonna delay!<br />';
    window.setTimeout(function() {
        document.getElementById('log').innerHTML += 'I was delayed!<br />';
        popFileSelector();
    }, 1000);
};
<body>
  <form>
      <input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)" />
  </form>
  <a onclick="popRightAway()" href="#">Pop Now</a>
    <br />
  <a onclick="popWithDelay()" href="#">Pop With 1 Second Delay</a>
    <div id="log">Log: <br /></div>
</body>

Aidin
sumber
3

Kode ini berfungsi untuk saya. Apakah ini yang ingin Anda lakukan?

<input type="file" style="position:absolute;left:-999px;" id="fileinput" />
<button  id="addfiles" >Add files</button>

<script language="javascript" type="text/javascript">
   $("#addfiles").click(function(){
      $("#fileinput").click();
   });
</script>
Mat J
sumber
3

Solusi saya untuk Safari dengan jQuery dan jQuery-ui:

$("<input type='file' class='ui-helper-hidden-accessible' />").appendTo("body").focus().trigger('click');
Selamat tinggal
sumber
kepala: tidak berfungsi untuk firefox 33, chrome 38. trigger ('click') hanya dapat bekerja dalam konteks peristiwa interaksi pengguna - penangan acara.
Amit G
3

Berikut ini adalah solusi JavaScript murni untuk masalah ini. Berfungsi dengan baik di semua browser

<script>
    function upload_image_init(){
        var elem = document.getElementById('file');
        if(elem && document.createEvent) {
           var evt = document.createEvent("MouseEvents");
           evt.initEvent("click", true, false);
           elem.dispatchEvent(evt);
        }
    }
</script>
Adam Fischer
sumber
2

Ada beberapa cara untuk mengarahkan kembali acara ke kontrol tetapi jangan berharap dapat dengan mudah memecat acara ke kontrol api sendiri karena browser akan mencoba untuk memblokir itu untuk alasan keamanan (baik).

Jika Anda hanya perlu dialog file untuk muncul ketika pengguna mengklik sesuatu, katakanlah karena Anda ingin tombol unggah file yang terlihat lebih baik, maka Anda mungkin ingin melihat apa yang muncul dengan Shaun Inman .

Saya dapat mencapai pemicu keyboard dengan pengalihan kreatif fokus dan keluar dari kontrol antara peristiwa keydown, penekanan tombol & keyup. YMMV.

Saran tulus saya adalah membiarkan ini sendirian, karena ini adalah dunia browser-ketidakcocokan-sakit. Pembaruan peramban minor juga dapat memblokir trik tanpa peringatan dan Anda mungkin harus terus menciptakan kembali peretasan untuk membuatnya berfungsi.

Borgar
sumber
2

Saya sedang meneliti ini beberapa waktu yang lalu karena saya ingin membuat tombol khusus yang akan membuka dialog file dan segera mulai mengunggah. Saya baru saja memperhatikan sesuatu yang mungkin memungkinkan - firefox tampaknya membuka dialog ketika Anda mengklik di mana saja pada unggahan. Jadi yang berikut mungkin melakukannya:

  1. Buat unggahan file dan elemen terpisah yang berisi gambar yang ingin Anda gunakan sebagai tombol
  2. Atur mereka untuk tumpang tindih dan membuat elemen file backgroud dan border transparan sehingga tombol adalah satu-satunya hal yang terlihat
  3. Tambahkan javascript untuk membuat IE membuka dialog ketika input tombol / file diklik
  4. Gunakan acara pertukaran untuk mengirimkan formulir ketika file dipilih

Ini hanya teoretis karena saya sudah menggunakan metode lain untuk menyelesaikan masalah tetapi mungkin saja berhasil.

pengguna83358
sumber
2

Saya memiliki <input type="button">tag yang tersembunyi dari pandangan. Apa yang saya lakukan adalah melampirkan"onClick" acara tersebut ke komponen apa pun yang terlihat dari jenis apa pun seperti label. Ini dilakukan dengan menggunakan Alat Pengembang Google Chrome atau Firebug Mozilla Firefox menggunakan klik kanan perintah "edit HTML". Dalam acara ini tentukan skrip berikut atau yang serupa:

Jika Anda memiliki JQuery:

$('#id_of_component').click();

jika tidak:

document.getElementById('id_of_component').click();

Terima kasih.

Kurt
sumber
2

Hai solusi ini berhasil. untuk mengunduh kita harus menggunakan MSBLOB

$scope.getSingleInvoicePDF = function(invoiceNumberEntity) {
   var fileName = invoiceNumberEntity + ".pdf";
   var pdfDownload = document.createElement("a");
   document.body.appendChild(pdfDownload);

   AngularWebService.getFileWithSuffix("ezbillpdfget",invoiceNumberEntity,"pdf" ).then(function(returnedJSON) {
       var fileBlob = new Blob([returnedJSON.data], {type: 'application/pdf'});
       if (navigator.appVersion.toString().indexOf('.NET') > 0) { // for IE browser
           window.navigator.msSaveBlob(fileBlob, fileName);
       } else { // for other browsers
           var fileURL = window.URL.createObjectURL(fileBlob);
           pdfDownload.href = fileURL;
           pdfDownload.download = fileName;
           pdfDownload.click();      
       }
   });
};

Untuk AngularJS atau bahkan untuk javascript biasa.

Shankar Shastri
sumber
1

Ini sekarang akan dimungkinkan di Firefox 4, dengan peringatan bahwa itu dianggap sebagai jendela pop-up dan karena itu akan diblokir setiap kali jendela pop-up muncul.

Neil
sumber
2
Sebenarnya firefox4 banyak meningkatkan status unggahan file. Masalah saya adalah bagaimana melakukan hal yang sama di browser Google Chrome.
erick2red
1

Inilah solusi yang cocok untuk saya: CSS:

#uploadtruefield {
    left: 225px;
    opacity: 0;
    position: absolute;
    right: 0;
    top: 266px;
    opacity:0;
    -moz-opacity:0;
    filter:alpha(opacity:0);
    width: 270px;
    z-index: 2;
}

.uploadmask {
    background:url(../img/browse.gif) no-repeat 100% 50%;
}
#uploadmaskfield{
    width:132px;
}

HTML dengan bantuan JQuery "kecil":

<div class="uploadmask">
    <input id="uploadmaskfield" type="text" name="uploadmaskfield">
</div>
<input id="uploadtruefield"  type="file" onchange="$('#uploadmaskfield').val(this.value)" >

Pastikan maskfied dilindungi dengan benar oleh bidang unggahan yang sebenarnya.

DejanR
sumber
1

Anda dapat melakukan ini sesuai jawaban dari kotak Buka File Dialog pada tag <a>

<input type="file" id="upload" name="upload" style="visibility: hidden; width: 1px;     height: 1px" multiple />
<a href="" onclick="document.getElementById('upload').click(); return false">Upload</a>
McLosys Creative
sumber
1

Saya menemukan bahwa jika input (file) berada di luar formulir, maka mem-klik event memanggil dialog file.

nikita
sumber
1

Semoga ini bisa membantu seseorang - saya menghabiskan 2 jam untuk membenturkan kepala:

Di IE8 atau IE9, jika Anda memicu membuka input file dengan javascript dengan cara apa pun (percayalah, saya sudah mencoba semuanya), itu tidak akan membiarkan Anda mengirimkan formulir menggunakan javascript, itu hanya akan gagal diam-diam.

Mengirimkan formulir melalui tombol kirim biasa dapat berfungsi tetapi memanggil form.submit (); diam-diam akan gagal.

Saya harus menggunakan overlay tombol pilih file saya dengan input file transparan yang berfungsi.

Galatia
sumber
Selain itu Anda dapat membungkus input file dalam label sehingga di IE Anda bisa mendapatkan area label yang dapat diklik untuk menutupi seluruh wilayah tombol Anda sedangkan hanya dengan tag input file, hanya setengah dari itu dapat diklik di IE.
galatians
1

Ini bekerja untuk saya:

<script>
    function sel_file() {
        $("input[name=userfile]").trigger('click');
    }  
</script>

<input type="file" name="userfile" id="userfile" />

<a href="javascript:sel_file();">Click</a>
joan16v
sumber
1

bukan tidak mungkin:

var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent('click', true, true, window);  
setTimeout(function(){ document.getElementById('input_field_id').dispatchEvent(evObj); },100);

Tapi entah bagaimana itu hanya berfungsi jika ini dalam fungsi yang dipanggil melalui event klik.

Jadi, Anda mungkin memiliki pengaturan berikut:

html:

<div onclick="openFileChooser()" class="some_fancy_stuff">Click here to open image chooser</div>
<input type="file" id="input_img">

JavaScript:

    function openFileChooser() {
      var evObj = document.createEvent('MouseEvents');
      evObj.initMouseEvent('click', true, true, window);  
      setTimeout(function()
      { 
        document.getElementById('input_img').dispatchEvent(evObj);      
      },100);      
    }
EscapeNetscape
sumber
The createEvent()dan initMouseEvent()yang ditinggalkan. Anda harus menggunakan CustomEvent()sekarang ...
Alexis Wilke
0

Kamu bisa memakai

<button id="file">select file</button>
<input type="file" name="file" id="file_input" style="display:none;">
<script>
$('#file').click(function() {
        $('#file_input').focus().trigger('click');
    });
</script>
Avanish Kumar
sumber