javascript - 如何最小化基于 jQuery 选择器的代码

标签 javascript jquery html

jQuery 脚本代码:

$(function() {
   $('#html_btn1').change(function(){

        var val = $(this).val();
        switch(val.substring(val.lastIndexOf('.')+1).toLowerCase()){
        case 'jpg' : 
        case 'png' :
        case 'gif' :
        case 'jpeg' : showimagepreview1(this); break;
        default : $('#errorimg').html("Invalid Photo"); break;
        }

    });

    $('#html_btn2').change(function(){

        var val = $(this).val();
        switch(val.substring(val.lastIndexOf('.')+1).toLowerCase()){
        case 'jpg' : 
        case 'png' :
        case 'gif' :
        case 'jpeg' : showimagepreview2(this); break;
        default : $('#errorimg').html("Invalid Photo"); break;
        }

    });

    $('#html_btn3').change(function(){

        var val = $(this).val();
        switch(val.substring(val.lastIndexOf('.')+1).toLowerCase()){
        case 'jpg' : 
        case 'png' :
        case 'gif' :
        case 'jpeg' : showimagepreview3(this); break;
        default : $('#errorimg').html("Invalid Photo"); break;
        }
    });

    function showimagepreview1(input) {
        if (input.files && input.files[0]) {
            var filerdr = new FileReader();
            filerdr.onload = function(e) {
                $('#cu1').attr('src', e.target.result);
            };
            filerdr.readAsDataURL(input.files[0]);
        }
    }

    function showimagepreview2(input) {

        if (input.files && input.files[0]) {
            var filerdr = new FileReader();
            filerdr.onload = function(e) {
                $('#cu2').attr('src', e.target.result);
            };
            filerdr.readAsDataURL(input.files[0]);
        }
    }

    function showimagepreview3(input) {

        if (input.files && input.files[0]) {
            var filerdr = new FileReader();
            filerdr.onload = function(e) {
                $('#cu3').attr('src', e.target.result);
            };
            filerdr.readAsDataURL(input.files[0]);
        }
    }
});

HTML 标记:

 <div class="form-group">
      <img id="cu1" src="upload-photo-img.jpg"/>
           <input type="file" path="images" id="html_btn1" />
     <img id="cu2" src="upload-photo-img.jpg"/>
           <input type="file" path="images" id="html_btn2" />
      <img id="cu3" src="upload-photo-img.jpg"/>
           <input type="file" path="images" id="html_btn3" />
 </div>

每当我尝试上传图像时,上面的代码都可以正常工作,它会检查验证并预览图像

但是我想将代码最小化为只有一个更改函数和一个 showimagepreview 函数

请给我一个想法如何实现?

最佳答案

@Huangism 是正确的,这可能应该在代码审查中。但是,为了提供帮助:

$(function() {
    // combine binding selector in to one
   $('#html_btn1,#html_btn2,#html_btn3').change(function(){

        var val = $(this).val();
        switch(val.substring(val.lastIndexOf('.')+1).toLowerCase()){
        case 'jpg' : 
        case 'png' :
        case 'gif' :
        case 'jpeg' : showimagepreview(this); break; // change to single "showimagepreview" function
        default : $('#errorimg').html("Invalid Photo"); break;
        }

    });

    function showimagepreview(input) {
        // grab "cu#" using the original element's id
        var cu_id = '#cu' + input.id.match(/\d+$/)[0];
        /* alt: var cu_id = input.id.replace('html_btn','#cu'); */

        if (input.files && input.files[0]) {
            var filerdr = new FileReader();
            filerdr.onload = function(e) {
                // reference id here
                $(cu_id).attr('src', e.target.result);
            };
            filerdr.readAsDataURL(input.files[0]);

        }
    }
});
  1. 使用逗号分隔的选择器将您的绑定(bind)合并为一个
  2. 删除重复的 showimagepreview# 方法并统一为一个函数
    • 根据原始输入的 ID 将硬编码的 cu# id 更改为动态 ID。
    • 在选择器中引用该 ID。

关于javascript - 如何最小化基于 jQuery 选择器的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24287533/

相关文章:

javascript - Angular 2窗口全局对象未定义

jquery - 从 WP 电子商务通知框中删除 'Continue Shopping' 链接

javascript - 我不能在我的 HTML 中使用 Vue js 的 JS 脚本

jquery - 如何在 html 弹出模式打开时使背景模糊?

javascript - 使用 jquery ajax 的多个操作

html - 是否可以使用剪辑隐藏 CSS 背景 Sprite 图像的特定区域?

javascript - 将带有类 ID 和图像的 div 添加到容器

html - Bootstrap 网格系统 : is this code correct?

javascript - AngularJS:如何设置 ng-model 或更改指令的范围值

javascript - 我不明白以下javascript