Bir dosya seçildiğinde yükleme formunu otomatik olarak nasıl gönderirim?


154

Basit bir dosya yükleme formum var. Bir dosya seçildiğinde dosyayı otomatik olarak nasıl gönderirim? Kullanıcının Gönder düğmesini tıklatmasını istemiyorum.


9
Kullanıcı yanlış dosyayı seçerse ne olur? IMO, ne zaman gönderileceğini seçmek için kullanıcıya bırakmalısınız.
— Tyler Crompton

2
@Tyler Çoğu insan doğru dosyayı seçecek ve ben UX sürtünmesini azaltmaya çalışıyorum. Yanlış dosyayı seçenler için, yüklendikten sonra silmeyi tercih edebilirler.
— ram1

3
"çoğu insan" akıllıca kararlar verir, ancak çoğu insan değildir.
— Phix

2
@TylerCrompton ile hemfikirim, kullanıcılar en aptal hataları yapacak ve sizi suçlayacak, gönderildikten sonra geri alabilirsiniz.
— Ross Keddy

3
en iyi cevap en basit cevaptır stackoverflow.com/a/25893747/1536309
— Blair Anderson

Yanıtlar:


194

Dosya girişiniz durumunda formunuzun submityöntemini çağırabilirsiniz onchange.

document.getElementById("file").onchange = function() {
    document.getElementById("form").submit();
};

http://jsfiddle.net/cwvc4/73/


4
Bu, jQuery çözümü işe yaramadığı için Safari'de çalışır. Garip?
— henrywright

2
@henrywright: Evet. JQuery'de Submit()çağrı jQuery submitolayını tetikler , ancak alttaki formu tetiklemez submit(). Tabii ki $('form')[0].submit()jQuery ile DOM öğesini vurmak için kullanabilirsiniz
— Gone Coding

68

file-İnput'a formu otomatik olarak herhangi bir değişiklikle göndermesini söyleyin :

<form action="http://example.com">
    <input type="file" onchange="form.submit()" />
</form>

Bu çözüm şu şekilde çalışır:

  • onchangene zaman girdi elemanı aşağıdaki komut dosyasını yürütün yapar valuedeğiştirilir
  • form bu girdi öğesinin bir parçası olduğu formu referans alır
  • submit() formun URL'de belirtildiği gibi tüm verileri göndermesine neden olur action

Bu çözümün avantajları:

  • idS olmadan çalışır . Bir html sayfasında birkaç formunuz varsa hayatı kolaylaştırır .
  • Yerel javascript, jQuery veya benzeri gerekmez.
  • Kod html etiketlerinin içindedir . Html'yi incelerseniz, hemen davranışını görürsünüz.

48

JQuery kullanma:

$('#file').change(function() {
  $('#target').submit();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="target" action="destination.html">
  <input type="file" id="file" value="Go" />
</form>


Ayrıca, aynı soru stackoverflow idi: stackoverflow.com/questions/4704154/…
— Samich

Bu yaklaşım Safari'de çalışıyor mu? Emin değilim. Hepsi işe yarayan Chrome, IE ve FF'yi test ettim.
— henrywright

@ErdalG: Çalışan jQuery sürümü eklendi. Bu sorunu önler.
— Gitti Kodlama

31

onchangeEtkinliği olan JavaScript :

<form action="upload.php" method="post" enctype="multipart/form-data">
     <input type="file" name="filename" onchange="javascript:this.form.submit();">
</form>

jQuery .change()ve .submit():

$('#fileInput').change(function() {
  $('#myForm').submit();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<form action="upload.php" id="myForm">
     <input type="file" id="fileInput">
</form>


neyin yanlış veya neyin iyileştirilmesi gerektiğini netleştirmek için oylama yaparsanız bir yorum ekleyin.
— Alex.K.

9

En kısa çözüm

<input type="file" name="file" onchange="javascript:document.getElementById('form').submit();" />

2
Nasıl?onchange="this.form.submit()"
— Vikkee

1
Nasıl onchange="form.submit()"? :)
— slartidan

5
<form id="thisForm" enctype='multipart/form-data'>    
  <input type="file" name="file" id="file">
</form>

<script>
$(document).on('ready', function(){
  $('#file').on('change', function(){
    $('#thisForm').submit();
  });
});
</script>

4

Zaten jQuery simple kullanıyorsanız:

<input type="file" onChange="$(this).closest('form').submit()"/>

4

Kullanıcı dosyayı seçtiğinde bu benim resim yükleme çözümüm.

HTML bölümü:

<form enctype="multipart/form-data" id="img_form" method="post">
    <input id="img_input" type="file" name="image" accept="image/*">
</form>

JavaScript:

document.getElementById('img_input').onchange = function () {
upload();
};
function upload() {
    var upload = document.getElementById('img_input');
    var image = upload.files[0];
    $.ajax({
      url:"/foo/bar/uploadPic",
      type: "POST",
      data: new FormData($('#img_form')[0]),
      contentType:false,
      cache: false,
      processData:false,
      success:function (msg) {}
      });
};

2

Aşağıdaki kodu jquery ile deneyin:

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>

<script>
$(document).ready(function(){
    $('#myForm').on('change', "input#MyFile", function (e) {
        e.preventDefault();
        $("#myForm").submit();
    });
});
</script>
<body>
    <div id="content">
        <form id="myForm" action="action.php" method="POST" enctype="multipart/form-data">
            <input type="file" id="MyFile" value="Upload" />
        </form>
    </div>
</body>
</html>

+1, çünkü bu, jquery ile boyun eğme olayını yakalamamı sağlayan tek yöntem. Form üzerinde denetimler yapamadığım veya kullanırken Ajax ile gönderemediğim için, diğer yöntemler gönderme olayını atlıyor gibi görünüyor. Teşekkürler
— user1404617 14:17

1

.NET WebForms'u kullananlar için tam sayfa gönderme istenmeyebilir. Bunun yerine, onchangejavascript'in gizli bir düğmeyi (ör. <Asp: Button ...) tıklatması ve gizli düğmenin geri kalanını alması için aynı fikri kullanın. Emin bir yapıyorsun olun display: none;butona değil Visible="false".


1

HTML

<form id="xtarget" action="upload.php">
<input type="file" id="xfilename">
</form>

JAVASCRIPT SAF

<script type="text/javascript">
window.onload = function() {
    document.getElementById("xfilename").onchange = function() {
        document.getElementById("xtarget").submit();
    }
};
</script>

1
<form action="http://example.com">
    <input type="file" onchange="Submit()" />
</form>

 <script>
     // it will submit form 0 or you have to select particular form
     document.getElementsByTagName("form")[0].submit();       
 </script>

0

Kodunuzun tek bir kod satırı ile çalışmasını sağlamak için bu kodu koyabilirsiniz

<input type="file" onchange="javascript:this.form.submit()">

Bu, dosyayı gönder düğmesine tıklamadan sunucuya yükleyecektir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.