2010-11-30 11 views
0

に私はこのようなコードを持っている:到達変数は、jQueryの

<script type="text/javascript"> 
    var currentPicture;//default picture 
    var picEL;//the image viewer element 
    jQuery("#backImageShower").hover(
     function(i) 
     { 
      picEL = jQuery("#dynloadarxdock > img"); 
      currentPicture = picEL.attr("src"); 
      picEl.attr("src","back.jpg"); 
     }, 
     function() 
     { 
      picEl.attr("src",currentPicture); 
     } 
    ); 
</script> 

をしかし、私はこのコードを実行すると、それは、picElが定義されていないと言います。私はそれが理由クロージャのことができると思いますが、このコードは完璧に動作します:

<script type="text/javascript"> 
    var currentPicture;//default picture 
    jQuery("#backImageShower").hover(
     function(i) 
     { 
      currentPicture = jQuery("#dynloadarxdock > img").attr("src"); 
      jQuery("#dynloadarxdock > img").attr("src","back.jpg"); 
     }, 
     function() 
     { 
      jQuery("#dynloadarxdock > img").attr("src",currentPicture); 
     } 
    ); 
</script> 

しかし、また、このコードは、グローバル変数が含まれており、それが動作します。

なぜ誰かに教えてもらえますか?

ありがとうございました。

+0

提案:ループ以外の変数には 'i'を使用しないでください。イベントハンドラの最初の引数は通常イベントであるため、それを 'e'と呼ぶほうがよいでしょう。 – ThiefMaster

+0

@ThiefMaster:確かに。 'ホバー(hover) 'ではイベントであり、どちらも使用されないので、'ホバー 'に渡された2番目のコールバックのように、完全にドロップすることができます。 –

答えて

7

問題は、ケーシングを混ぜていることです。変数はpicELと宣言されていますが、時にはpicEl(小文字の「l」、エラーがある場所)として使用されます。

+0

Upps、そうですね:) – Tarik

0

picELではなくpicElを使用しています。

picEl.attr("src",currentPicture); 

する必要があります:あなたはあなたが持っている二ホバー機能を除いてどこでもpicELを使用している

picEL.attr("src",currentPicture); 
関連する問題