2012-03-03 12 views
0

私は、実行時にスケーリングされたイメージのディメンション値を返すイメージディメンション計算関数を持っています。 (注:画像とその寸法のリストは配列からアクセスされている。)JavaScript:他の関数の中の関数を評価する

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

ボタンは、ディメンション計算を適用する必要がある配列の現在のイメージインデックスを調整します。しかし、すべてのボタンクリック機能に同じsetDesiredDimensions関数をコピーして貼り付けるのではなく、クリーンなコードのショートカットとしてアクセス/評価するだけです。

私はeval()を聞いた。危険で遅いです。何か案は?

+1

evalは悪であるようなものをそれが必要とする引数を渡すことができるように

はそれを再定義します。それを使用しないでください。これまで – Halcyon

+1

'setDesiredDimensions()'を呼び出さないのはなぜですか? – bdares

+0

評価は通常悪い考えです - 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}; 
}  
関連する問題