2012-03-03 4 views
0

У меня есть функция вычисления размеров изображения, которая возвращает масштабные значения размера изображения при его выполнении. (Обратите внимание: список изображений и их размеры доступны из массивов.)JavaScript: eval функция внутри другой функции

function setDesiredDimensions() { 
       var width = Math.min(imagesOrigWidths[currindex], desiredWidthLimit); 
       var height = Math.ceil((width/imagesOrigWidths[currindex]) * imagesOrigHeights[currindex]); 

       some more calculation code here... 

       return {width:width,height:height}; 
      }  

var size = setDesiredDimensions(imagesOrigWidths[currindex], imagesOrigHeights[currindex]); 

Тогда у меня есть некоторые кнопки в HTML:

<a id="button1"></a> 
<a id="button2"></a> 
<a id="button3"></a> 

И различное OnClick события на этих кнопках, такие как:

$('#button1').click(function() { 
    currindex = (currindex+1) % max; 

    **I need to evaluate setDesiredDimensions function here ** 

    $("#imageswap").attr({src: imgSrcBase(imagesGuids[currindex]), width: size.width, height: size.height}) 
}); 

Кнопки регулируют текущий индекс изображения в массиве, который должен применяться для расчета размера. BUT: Я не хочу, чтобы одна и та же функция setDesiredDimensions копировалась и вставлялась во все функции нажатия кнопок, а просто обращалась/оценивала ее как ярлык для более чистого кода.

Я слышал eval(); является опасным и медленным. Есть идеи?

+1

Eval является злом. Не используйте его. Когда-либо. – Halcyon

+1

Почему бы просто не вызвать 'setDesiredDimensions()'? – bdares

+0

Eval обычно считается плохой идеей - см. Http://stackoverflow.com/questions/86513/why-is-using-javascript-eval-function-a-bad-idea – kaj

ответ

1

Если вы определили setDesiredDimensions в области, доступной для всех обработчиков событий, вы можете просто вызвать функцию. Вот для чего нужны функции.

Я думаю, ваша проблема в том, что функция работает с глобальными переменными вместо переданных ей аргументов. В вашем примере вы передаете imagesOrigWidths[currindex] в качестве аргумента, но также получаете доступ к функции imagesOrigWidths[currindex] внутри функции, что не имеет смысла.

Пересмотрите его так, что вы можете просто передать аргументы, необходимые, что-то вроде

function setDesiredDimensions(orig_width, orig_height, limit) { 
    var width = Math.min(orig_width, limit); 
    var height = Math.ceil((width/orig_height) * orig_height); 

    // some more calculation code here... 

    return {width:width,height:height}; 
}  
Смежные вопросы