2015-06-30 12 views
5

Mam funkcję, która ma wartości wstawione do zmiennych w innej funkcji.Zmienna dostępu z funkcji

Uruchomienie:

Kiedy zmienia rozmiar okna, pożary resizeImage() funkcyjny.

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

Resize Funkcja:

Funkcja ta sprawdza każdy element z obrazu rozmiaru klasę i dodać ponownie ustawić SRC dla obrazu przez zmianę wartości szerokości (dynamiczne od Scene7).

Problem polega na tym, że element.attr ('src', newSrc); newSrc nie istnieje jako przechowywany w sizingMethod().

Czy mimo chwytając zmienną od sizingMethod() funkcji i umieszczenie go w 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); 
    }); 
}; 

Dobór Funkcja:

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

Odpowiedz

5

Podczas korzystania prymitywne, co wysyłasz jest nie wartość odniesienia, więc sNewSrc = newsrc, więc wszelkie zmiany zrobić, aby sNewSrc że zmienna nie zmieni newSrc.

można naprawić swój kod za pomocą:


zwrot: Powrót wartość w sizingMethod funkcję:

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 Funkcja:

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

zamknięcie: jeśli zadeklarujesz sizingMethod wewnątrz anonimowej funkcji, masz również dostęp do zmiennej newSrc i innych zmiennych.

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

obiekt: jeśli używasz obiekt/tablicy zamiast prymitywne jako argument

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 Funkcja:

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

Dziękujemy! Zastosowano iterację obiektu. Działa doskonale. –

Powiązane problemy