2015-06-30 28 views
5

Tôi có một hàm có giá trị được chèn vào các biến trong hàm khác.Biến truy cập từ hàm

khởi:

Khi cửa sổ thay đổi kích thước, nó cháy resizeImage() chức năng.

$(window).resize(function() { 
    resizeImage(); 
}); 

Resize Chức năng:

Chức năng này sẽ kiểm tra tất cả các yếu tố với hình ảnh thay đổi kích thước lớp và thêm điều chỉnh lại SRC cho hình ảnh bằng cách thay đổi giá trị chiều rộng (động từ scene7).

Vấn đề là element.attr ('src', newSrc); newSrc không tồn tại như được lưu trữ trong sizingMethod().

Có cách nào để lấy biến từ hàm sizingMethod() và đặt nó trong phần tử .attr ('src', newSrc);.

function resizeImage() { 
    $('.image-resize').each(function() { 

     var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc; 

     var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc; 

     if ($(window).width() > 1824) { 
      sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000'); 
     } else if ($(window).width() <= 1824 && $(window).width() > 1366) { 
      sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824'); 
     } 

     element.attr('src', newSrc); 
    }); 
}; 

Sizing Chức năng:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){ 
    sCurrentW = sSrc.match(sRegex); 
    sNewW = 'wid=' + sNewWidth; 
    sNewSrc = sSrc.replace(sCurrentW, sNewW); 
    textWidth = sNewW.replace('wid=', ''); 
    $(".dsply-screen-size").text($(window).width()); 
    $(".dsply-image-size").text(textWidth); 
} 

Trả lời

5

Khi bạn sử dụng một nguyên thủy, những gì bạn gửi là giá trị không phải là tài liệu tham khảo, vì vậy sNewSrc = newSrc, vì vậy bất kỳ thay đổi bạn làm gì để sNewSrc rằng biến sẽ không thay đổi newSrc.

Bạn có thể sửa mã của bạn sử dụng:


trở: trả lại giá trị trong hàm sizingMethod:

if ($(window).width() > 1824) { 
    newSrc = sizingMethod(src, regx, currentWidth, newWidth, '2000'); 
} else if ($(window).width() <= 1824 && $(window).width() > 1366) { 
    newSrc = sizingMethod(src, regx, currentWidth, newWidth, '1824'); 
} 

Sizing Chức năng:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewWidth){ 
    sCurrentW = sSrc.match(sRegex); 
    sNewW = 'wid=' + sNewWidth; 
    var sNewSrc = sSrc.replace(sCurrentW, sNewW); 
    textWidth = sNewW.replace('wid=', ''); 
    $(".dsply-screen-size").text($(window).width()); 
    $(".dsply-image-size").text(textWidth); 
    return sNewSrc; 
} 

đóng cửa: nếu khai báo sizingMethod bên trong hàm ẩn danh, bạn có quyền truy cập vào biến newSrc và các biến khác.

function resizeImage() { 
    $('.image-resize').each(function() { 

     var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc; 

     var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc; 

     if ($(window).width() > 1824) { 
      sizingMethod('2000'); 
     } else if ($(window).width() <= 1824 && $(window).width() > 1366) { 
      sizingMethod('1824'); 
     } 

     element.attr('src', newSrc); 

     function sizingMethod(sNewWidth){ 
      currentWidth = src.match(regx); 
      var sNewW = 'wid=' + sNewWidth; 
      newSrc = sSrc.replace(currentWidth, sNewW); 
      textWidth = sNewW.replace('wid=', ''); 
      $(".dsply-screen-size").text($(window).width()); 
      $(".dsply-image-size").text(textWidth); 
     } 
    }); 
}; 

đối tượng: nếu bạn sử dụng một đối tượng/mảng thay vì một nguyên thủy như một cuộc tranh cãi

function resizeImage() { 
    $('.image-resize').each(function() { 

     var element = $(this), src = $(this).attr('src'), regx = /wid=\d+(\.\d)*/g, currentWidth, newWidth, newSrc = {}; 

     var attrElement = $(this), attrSrc = $(this).attr('data-zoom-image'), attrRegex = /wid=\d+(\.\d)*/g, attrCurrentWidth, attrNewWidth, attrNewSrc; 

     if ($(window).width() > 1824) { 
      sizingMethod(src, regx, currentWidth, newWidth, newSrc, '2000'); 
     } else if ($(window).width() <= 1824 && $(window).width() > 1366) { 
      sizingMethod(src, regx, currentWidth, newWidth, newSrc, '1824'); 
     } 

     element.attr('src', newSrc.src); 
    }); 
}; 

Sizing Chức năng:

function sizingMethod(sSrc, sRegex, sCurrentW, sNewW, sNewSrc, sNewWidth){ 
    sCurrentW = sSrc.match(sRegex); 
    sNewW = 'wid=' + sNewWidth; 
    sNewSrc.src = sSrc.replace(sCurrentW, sNewW); 
    textWidth = sNewW.replace('wid=', ''); 
    $(".dsply-screen-size").text($(window).width()); 
    $(".dsply-image-size").text(textWidth); 
} 
+0

Cảm ơn bạn! Đã sử dụng lặp lại đối tượng. Làm việc hoàn hảo. –

Các vấn đề liên quan