2015-04-12 28 views
4

在載入時,我創建一個貼圖,關鍵是anker-element,值是貼圖的偏移量。不幸的是,我無法正確讀出val,它總是返回最後一個鍵的值。哪裏不對?JS - 如何獲得地圖的正確值?

js fiddle

HTML

<a>Anker</a><a>Anker</a><a>Anker</a> 

JS

var ankers = {}; 
$('a').each(function(){ 

var pos = $(this).offset().left; 

ankers[$(this)] = pos; 
}); 

$('a').click(function(e) { 
    e.preventDefault(); 
    alert(ankers[$(this)]); 
}); 

回答

4

JavaScript對象,你使用的地圖這裏只支持串按鍵, (就像大多數其他語言中的對象一樣)。

如果你想要一個實際的地圖應使用Map對象,而不是如果你想使用一個對象的關鍵 - 但在新的瀏覽器只有那些工作,您可以(polyfill it though):

var ankers = new Map(); 
$('a').each(function(){ 

    var pos = $(this).offset().left; 

    ankers.set($(this), pos); 
}); 

$('a').click(function(e) { 
    e.preventDefault(); 
    alert(ankers.get($(this)); 
}); 

Fiddle(基於dfsq's)

或者,您可以使用該元素的ID作爲關鍵字併爲其提供ID。或者,你能避免這完全和保存上的對象,而不是在地圖中的數據:

$('a').each(function(){ 
    $(this).data("anker", $(this).offset().left); 
}); 

$('a').click(function(e) { 
    e.preventDefault(); 
    alert($(this).data("anker"); 
}); 

Fiddle

你應該只使用數據屬性的顯示屬性和約束力,但這似乎是適當的這裏就是這種情況。

2

在javascript對象的屬性總是一個字符串。因此,當您嘗試將對象設置爲鍵時,此對象將轉換爲字符串類型。因此,您只有ankers對象只有一個密鑰[object Object]

而是考慮給IDS來錨和使用是這樣的:

var ankers = {}; 
$('a').each(function() { 
    var pos = $(this).offset().left; 
    ankers[this.id] = pos; 
}); 

$('a').click(function (e) { 
    e.preventDefault(); 
    $('.val').val(ankers[this.id]); 
}); 

演示:http://jsfiddle.net/1c4h17ma/1/