2017-09-19 21 views
-1

ファイル入力のプレビューを取得しようとしています。jquery関数を呼び出すことができません

正常に機能を呼び出すと正常に動作するjqueryスクリプトがあります。

$('#images').on("change", previewImages); 

This作品です。

しかし、私は

$('#images').on("change", function(){ 

    previewImages(); 

}); 

Thisが動作しない、次のように異なり、同じ関数の呼び出しを入れたとき。

誰かが私にこれを手伝ってもらえますか?他の関数を呼び出すにはif else statementを書く必要があります。助けてくれてありがとう。

+0

私ははいその作業を – krishnar

+0

をチェックすると、それが働いています! – rahulsm

+0

両方のFiddlesには$( '#images')が含まれていますon( "change"、previewImages); –

答えて

5

有効質問

理由:これが原因thisで起こるuは最初のアプローチが、第2のアプローチthisの場合に窓要素を参照しているを使用しているときに要素をファイルを参照するもので、それが呼び出されます。だからこれを機能させるとあなたの質問は解決されます。

$('#images').on("change", function(e) { 
    /* issue is with this */ 
    previewImages(e, this); 
}); 

var count = 0; 

function previewImages(evt, cur) { 
    var $fileUpload = $("input#images[type='file']"); 
    count = count + parseInt($fileUpload.get(0).files.length); 
    if (parseInt($fileUpload.get(0).files.length) > 7 || count > 6) { 
     alert("You can only upload a maximum of 6 files"); 
     count = count - parseInt($fileUpload.get(0).files.length); 
     evt.preventDefault(); 
     evt.stopPropagation(); 
     return false; 
    } 
    $("#taskbar").css("height", "auto"); 
    var $preview = $('#preview').empty(); 
    if (cur.files) $.each(cur.files, readAndPreview); 
    function readAndPreview(i, file) { 
     // if (!/\.(jpe?g|png|gif|mp4)$/i.test(file.name)){ 
     // return alert(file.name +" is not an image"); 
     // } 
     var reader = new FileReader(); 
     $('#preview img').addClass('img-responsive'); 
     $(reader).on("load", function() { 
      $preview.append($("<img/>", { 
       src: this.result, 
       height: 100 
      })); 
     }); 
     reader.readAsDataURL(file); 
    } 
} 
+1

@chrisこれを試して、それはあなたのために動作するはずです – krishnar

+0

なぜそれは最初のアプローチではなくウィンドウのファイル要素を参照していますか? –

+0

@ KillerDeathそれはchangeイベントとuがファイル要素を直接取得し、関数内で2番目の関数が1つ以上の関数を呼び出すため、イベントターゲットがウィンドウとして変更されるためです。 – krishnar

0

prePreviewImages関数を作成し、これを最初の方法で使用します。その関数の中で、if文を使って、previewImages()や他の関数を呼び出します。

0

次は、どちらの方法がJSFiddleに私のために働くように見える

$('#images').change(function(e) {  
     if(e == "some condition"){ // if else goes here 
       previewImages(); 
     }else { 
      SomeOtherFun(); 
     } 
    }); 
+0

'e'パラメータが常にイベントハンドラに提供されているとすれば、これを期待して –

0

..行う必要があります。あなたはそれが browser compatibility issueではないと確信していますか?

開発ツールのコンソールにエラーが記録されていない場合は、

+0

はもう1つ動作しません。私は他の誰かがそれを更新したかどうかはわかりませんが、私はそれをどのように動作させたいのかを戻しました。ありがとう – chris

関連する問題