2011-12-03 8 views
0

これは誰かにとって非常にシンプルになるだろうが、私はちょうどそれを理解しようと2時間を過ごした。矛盾のないグローバルjQuery変数

jqueryの内部で関数を使用する方法はありません。私はUncaught ReferenceError: swapImages is not defined (anonymous function)を取得し続けるjqueryを使用しない場合は、コードは正常に動作しません。 (私はそれはワードプレスに組み込まれているとして、競合を使用しないことがあります)

jQuery(document).ready(function ($) { 
    function swapImages() { 
     var $active = $('#myGallery .active'); 
     var $next = ($('#myGallery .active').next().length > 0) ? $('#myGallery .active').next() : $('#myGallery img:first'); 
     $active.show(function() { 
      $active.show().removeClass('active'); 
      $next.show().addClass('active'); 
     }); 
    } 
    // Run our swapImages() function every 5secs 
    setInterval('swapImages()', 500); 
}) 

See the original question here

+0

なぜあなたはグローバルスコープであなたの関数を得るいけませんか? –

+0

それで '$ === jQuery'は' window.swapImages = function(){...} 'を使わないと利用できません。しかし、グローバルを使用することはとにかく悪いです... – ThiefMaster

答えて

4

問題は、不適切たsetIntervalを使用することです。 は、文字列を渡していないが、常に関数を渡す決して - 文字列を渡すとevalを使用するのと同じくらい悪いです:

setInterval(swapImages, 500); 

は、その後、あなたはすべてのグローバル変数/関数を必要としません。あなたが関数に引数を渡す必要がある場合には

、あなたは匿名関数でラップしたい:

setInterval(function() { /* your code/function call */ }, 500); 
+1

よく夕方に行った、以前に尋ねたはずです! – BandonRandon

0
setInterval(function(){swapImages()}, 500); 
+1

匿名機能は必要ありません。 'setInterval(swapImages、500)'はうまくいきます。 – jfriend00