2017-12-24 112 views
6

Theo sau 3 khối mã, muốn tạo ra bằng cách sử dụng vòng lặp/mảng để làm cho mã ngắn. Tôi biết sử dụng vòng lặp không phải là một điều lớn, nhưng đối với tôi rất khó để thay đổi truy cập với biến "openFile", tôi muốn tăng số lượt truy cập với biến "openFile" như openFile1, openFile2 và openFile3 với mỗi lần lặp của vòng lặp.Cần giúp đỡ để tạo ra ba khối bằng cách sử dụng vòng lặp

$(function() { 

      var openFile1 = function(event) { 
     var input = event.target; 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var dataURL = reader.result; 
      var output = document.getElementById('img1'); 
      output.src = dataURL; 
     }; 
     reader.readAsDataURL(input.files[0]); 
     }; 



     var openFile2 = function(event) { 
     var input = event.target; 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var dataURL = reader.result; 
      var output = document.getElementById('img2'); 
      output.src = dataURL; 
     }; 
     reader.readAsDataURL(input.files[0]); 
     }; 

     var openFile3 = function(event) { 
     var input = event.target; 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var dataURL = reader.result; 
      var output = document.getElementById('img3'); 
      output.src = dataURL; 
     }; 
     reader.readAsDataURL(input.files[0]); 
     }; 


     }); 
+0

Dòng có lỗi rõ ràng 'var openFile '+ i +'; = function (sự kiện) {'. Xóa ''+ i +';' – forumulator

+0

@forumulator, tôi chỉ muốn thay đổi openFile1, openFile2, openFile3, openFile4, openFile5 và openFile6 với mỗi vòng lặp lặp lại. – Super

+0

Mục đích của bạn là gì, bạn đang cố gắng làm gì với sáu chức năng, exaclty? Bạn không thể làm những gì bạn đang mô tả. Kịch bản trường hợp tốt nhất, tạo một mảng và thêm các hàm vào đó. – forumulator

Trả lời

10

Chỉ cần tạo hàm được tính là arg và trả về hàm chỉ diễn ra sự kiện dưới dạng arg. do đóng cửa, giá trị của 'count' được đưa ra khi gọi openFile với một giá trị đã cho sẽ được sử dụng cho hàm bên trong.

var openFileFunc = function(count) { 
    return 
     function(event) { 
     var input = event.target; 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var dataURL = reader.result; 
      var output = document.getElementById('img'+(count+1)); 
      output.src = dataURL; 
     }; 
     reader.readAsDataURL(input.files[count]); 
     }; 
    } 

Bây giờ bạn có thể nhận được ba chức năng tương đương với những gì bạn đã làm bằng cách gọi một bản đồ như thế này:

var functions = [1,2,3].map(openFileFunc)

Mỗi chức năng trong mảng này cũng giống như những gì bạn đã có.

+0

@ user123 thực hiện điều này trả lời câu hỏi của bạn. Nếu không, bạn cần gì khác? –

2
var openFile = function(arrOfCount){ 
    var reader; 
    for(i=0;i<arrOfCount;i++){ 
     reader= new FileReader(); 
     return function(event){ 
      var input = event.target; 
      reader.onload = function(){ 
        var dataURL = reader.result; 
        var output = document.getElementById('img'+(i+1)); 
        output.src = dataURL; 
       }; 
      reader.readAsDataURL(input.files[i]); 
      } 
     } 
} 
1

Tôi đã cố gắng để khái quát đang

var allImages = document.getElementsByClassName("my-images"); 
for (var i = 0; i < allImages.length; i++) { 
     var openFile = function(event) { 
     var input = event.target; 
     var reader = new FileReader(); 
     reader.onload = function(){ 
      var dataURL = reader.result; 
      var output = allImages[i]; 
      output.src = dataURL; 
     }; 
     reader.readAsDataURL(input.files[0]); 

} 

Nhưng vẫn có vẻ như bạn có 3 điều khiển tập tin tải lên và bạn muốn hiển thị xem trước cho mỗi, là nó như vậy?

2

Có thể điều này sẽ phù hợp với bạn.

function callFunctionNtimes(totalCount){ 

     for(start=1;i<=totalCount;i++) 
     { 
      var filevar = 'openFile'+start; 
      filevar = function(event) 
      { 
       var input = event.target; 
       var reader = new FileReader(); 
       reader.onload = function() 
       { 
        var dataURL = reader.result; 
        var output = document.getElementById('img'+start); 
        output.src = dataURL; 
       }; 
        reader.readAsDataURL(input.files[0]); 
      }; 
     } 
    } 
     //to call n time below function 
     var totalCount = 3; 
     callFunctionNtimes(totalCount); 
Các vấn đề liên quan