2015-06-10 2 views
0
Transition.start = function(){ 
    for(var j = 0; j < 6; j++) 
    { 
     console.log("FOR LOOP"); 
     (function(){ 
      console.log("INNER Function"); 
      var image = new Image(); 
      image.src = path + Config.imgName[j] + ".jpg"; 
      image.onload = function() { 

       console.log("GONE"); 
       clearImages[source].push(image); 
       console.log(image); 
      }; 
     })(); 
    } 
} 

В этом случае на консоли «FOR LOOP» и «INNER Function» печатается 6 раз, но «GONE» печатается 12 раз. Я не могу понять причину этого. Я хочу также запустить тело onload 6 раз.Javascript: функция перегрузки, называемая дважды

и Transition.start вызывается из onDocumentKeyDown слушателя как этот

function onDocumentKeyDown(event) 
{ 
    if (keyPressed == 38) //up arrow 
     Transition.start(); 
} 
+0

Покажите нам код, в котором эта функция вызывается, –

+0

Я думаю console.log (изображение) называет «image.onload» и, следовательно, «GONE» печатается много раз. –

+0

Вы попробовали 'console.trace()'? – andale

ответ

3

я получил источник проблемы. Фактически image.onload вызывается каждый раз, когда изображение отображается в браузере. На самом деле, я загружаю изображение, которое я хранили в clearImages, так что если в будущем требуется изображение, оно может быть взято непосредственно из этого массива, поэтому, если изображение требуется в будущем, оно загружается из массива clearImages, но снова будет вызываться функция onload.

Так что я решил эту вещь, делая image.onload = null внутри onload самой функции