javascript - 需要帮助使用循环生成三个 block

标签 javascript jquery arrays arraylist

以下 3 block 代码,想使用循环/数组生成短代码。我知道使用循环不是什么大事,但对我来说很难用变量“openFile”更改计数器,我想要计数器递增在每次循环迭代中使用变量“openFile”,如 openFile1、openFile2 和 openFile3。

$(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]);
      };


       });

最佳答案

只需创建一个将计数作为参数的函数,并返回一个仅将事件作为参数的函数。由于闭包,使用给定计数值调用 openFile 时给出的 'count' 值将用于内部函数。

  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]);
      };
    }

现在你可以得到这三个函数等同于你通过调用一个映射所做的事情:

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

此数组中的每个函数都与您拥有的相同。

关于javascript - 需要帮助使用循环生成三个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47964629/

相关文章:

c++ - 指向绑定(bind)函数的指针只能用于调用该函数

javascript - 从多维数组中删除具有重复 ID 的项目,并保留其标准

javascript - JavaScript 中的日期操作

javascript - setInterval运行非常慢

javascript - 更新 Watch Vue.js 上的 cookie

javascript - 有什么方法可以使用 jQuery 替换在数组中定义值的文本吗?

javascript - 从 SSL iframe 到父级的 onclick 链接?

c# - 查找使用 jQuery 在代码隐藏中创建的控件

javascript - 如何通过外部控件/事件启动/停止 jCarousel

jquery - Highcharts 数据标签被切断