javascript - 简化/模块化您的 JavaScript 代码

标签 javascript

我知道在编码中应该遵循 DRY 原则。但是,我不太喜欢 javascript,所以我想问一下如何使下面的代码更具可读性和可维护性。

$('#frontfile_v').change(function(){
        reader = Main.Mod.image_change(this);
        reader.onload = frontvImageIsLoaded;
    });
    $('#rearfile_v').change(function(){
        reader = Main.Mod.image_change(this);
        reader.onload = rearvImageIsLoaded;
    });
    $('#rightfile_v').change(function(){
        reader = Main.Mod.image_change(this);
        reader.onload = rightvImageIsLoaded;
    });
    $('#leftfile_v').change(function(){
        reader = Main.Mod.image_change(this);
        reader.onload = leftvImageIsLoaded;
    });
    //called after an image file has been chosen
    function frontvImageIsLoaded(e) {
        $("#frontimagepreview").attr('src', e.target.result);
        $("#frontpreview-msg").css('color', 'green');  
    };
    function rearvImageIsLoaded(e) {
        $("#rearimagepreview").attr('src', e.target.result);
        $("#rearpreview-msg").css('color', 'green');   
    };
    function rightvImageIsLoaded(e) {
        $("#rightimagepreview").attr('src', e.target.result);
        $("#rightpreview-msg").css('color', 'green');  
    };
    function leftvImageIsLoaded(e) {
        $("#leftimagepreview").attr('src', e.target.result);
        $("#leftpreview-msg").css('color', 'green');   
    };

这是 Main.Mod.image_change() 的代码

 var image_change = function handleFileImageChange(obj){
            //holds the image preview object

            var file = obj.files[0];
            var imagefile = file.type;
            var match= ["image/jpeg","image/png","image/jpg"];

            if(!((imagefile==match[0]) || (imagefile==match[1]) || (imagefile==match[2]))){
              alert("Incorrect image file. You still be able to upload this form but the system " + 
               "will be using the default image.");
              $("#preview-msg").css('color', 'red');
              return false;
            }else{
                var reader = new FileReader();
                //reader.onload = imageIsLoaded;
                reader.readAsDataURL(obj.files[0]); 

              return reader;
            }
        };

上面的代码将处理文件输入更改事件,然后根据文件输入更改 img src。

我知道我写的代码真的很糟糕,因为我必须多次重复我的代码。如何才能更有效地实现它?

谢谢。

最佳答案

  1. 使用,组合选择器:

    $('#frontfile_v,#rearfile_v').change(function(){
        // ... 
    })
    

“change”事件将绑定(bind)到选择器匹配的每个对象。这样您就不需要重复绑定(bind)。

  • 通过传递参数将“图像加载”函数合并为一个函数:

    var idsMap = {
       leftfile_v : {preview : '#frontimagepreview', msg : '#frontpreview-msg'},
       // etc...
    };
    
    $('#leftfile_v,#rearfile_v').change(function(){
        var ids = idsMap[$(this).attr('id')];
        reader = Main.Mod.image_change(this);
        reader.onload = function(e) {
            imageIsLoaded(e, ids.preview, ids.msg);
        };
    });
    
    function imageIsLoaded(e, preview, msg) {
        $(preview).attr('src', e.target.result);
        $(msg).css('color', 'green');  
    };
    
  • 关于javascript - 简化/模块化您的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286776/

    相关文章:

    javascript - jQuery - 使用 JSON 进行发布并接收 JSON 和 HTML

    JavaScript - 双击选择 ‘pre code block’ 内的所有文本

    javascript - AngularJS ngDisabled 无法在表单内工作

    javascript - React Native 更新状态中嵌套对象的单个属性

    javascript - 动态表内的按钮仅执行一次 JQuery 函数

    javascript - 使用 getAttribute 更改单元格的背景颜色

    javascript - Bottle .py : sending data via javascript

    JavaScript、jQuery 和 'this' : what's going on here?

    javascript - 如何调整图像的方向以显示正确的图像预览?

    javascript - ES6 promise 返回值的执行顺序