2014-11-14 85 views
0

我有一個縮略圖滾動條,我只想在縮略圖上將鼠標懸停3秒時觸發某些動作。我有以下代碼,但內部setTimeOut函數沒有從外部函數獲取參數 - sourceURL控制檯輸出得到'undefined'錯誤。但'hover'函數我確實看到了正確的sourceURL值。 在此先感謝!Javascript:將參數傳遞給內部setTimeOut函數?

var tOut; 
    $('img.thumb').hover(function(){ 
     var sourceURL = $(this).attr('src'); 
     var lat = $(this).attr('lat'); 
     var lng = $(this).attr('lng'); 
     tOut = setTimeout(function(sourceURL,lat,lng){ 
     console.log(sourceURL);//undefined 
     map.setView(new L.LatLng(lat, lng), (init_mapzoom+2)); 
    },3000); 
    },function(){ 
    clearTimeout(tOut); 
    }); 
+0

謝謝。但是什麼代碼? – IrfanClemson 2014-11-14 15:19:34

+0

否。setTimeOut需要從懸停函數中獲取參數。 – IrfanClemson 2014-11-14 15:20:17

回答

1

您不需要將變量傳遞給該函數。隨着功能的範圍內創建,其中存在變數,他們被發現在封閉的功能,所以該函數可以使用它們的範圍變本加厲之後:

var tOut; 
$('img.thumb').hover(function(){ 
    var sourceURL = $(this).attr('src'); 
    var lat = $(this).attr('lat'); 
    var lng = $(this).attr('lng'); 
    tOut = setTimeout(function(){ 
    console.log(sourceURL); 
    map.setView(new L.LatLng(lat, lng), (init_mapzoom+2)); 
    },3000); 
},function(){ 
    clearTimeout(tOut); 
}); 
+0

謝謝!完美的工作。 – IrfanClemson 2014-11-14 15:31:07

1

functionsetTimeout不必須接受他們作爲論據。

也被定義在.hover()function之內,它將在範圍內具有sourceURL等。

$('img.thumb').hover(function(){ 
    var sourceURL = $(this).attr('src'); 
    // .. 

    tOut = setTimeout(function(){ 
    console.log(sourceURL); 
    // ... 
    }, 3000); 
}, ...); 

再次將它們作爲命名參數將shadowvar S,所以只有參數是function中訪問。

+0

謝謝!會接受你的答案,但Guffa的第一。 – IrfanClemson 2014-11-14 15:31:33