2015-06-30 173 views
5

我有一個函數將值插入到另一個函數的變量中。函數訪問變量

初始化

當窗口調整大小,它觸發了resizeImage()函數。

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

調整大小功能

此功能檢查的每一個元素與所述圖像調整大小類和通過改變寬度值(從scene7動態)添加重新調整SRC爲圖像。

問題是,element.attr('src',newSrc); newSrc不存在,因爲它存儲在尺寸方法()

反正有從sizingMethod()函數抓住變量和將其置於element.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); 
    }); 
}; 

尺寸功能

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

回答

5

當你使用原始的,你送的是價值而不是引用,所以sNewSrc = newSrc,所以任何你做sNewSrc的更改變量不會改變newSrc。

您可以使用修復您的代碼:


回報:返回的功能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'); 
} 

尺寸功能:

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

closure:如果在匿名函數中聲明sizingMethod,那麼您可以訪問變量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('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); 
     } 
    }); 
}; 

對象:如果你使用一個對象/數組,而不是一個原始的作爲參數

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

尺寸功能:

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

謝謝!使用對象迭代。完美工作。 –