2016-08-29 241 views
0

我有一個循環,像這樣:訪問屬性

for (var i = 0; i < 10; i++) { 
    obj[i] = new MapArea(some passed variables); 
} 

現在這個構造有一些預定義的屬性,以及一些在初始化定義。正如for循環所暗示的,每個obj都保存在數組obj []中的自己的索引中。我的問題是,我已經通過初始化迭代後,我不能用

this.propertyName; 

$(this).propertyName; 

插件引用單個對象的屬性,我的建築工作過的鼠標事件(點擊和懸停)這意味着我需要能夠檢查附加到事件上的obj是否具有當前狀態的特定屬性,但是沒有辦法通過編程知道它在數組中的哪個索引來引用它,或者至少可以輕鬆簡潔地實現。

有沒有人遇到過這個問題,並找到一個解決方案,或者我幾乎被迫使用數組和索引作爲參考?任何幫助都是極好的。

這裏是我的方法,例如一個:

$.fn.clickLight = function(options) { 
    var defaults = $.extend({ 
    color : "#43464B", 
    opacity : "0.3" 
    }, options); 
    ctx.globalAlpha = defaults.opacity; 

    $(area_ref).click(function(event) { 
    $(this).handleMouse(event).each(function() { 
     if (!$(this).clicked) { // I try and access here 
     console.log(obj.this.clicked); 
     $(this).highlight(defaults.color); 
     $(this).clicked = true; 
     } else { 
     console.log(this.clicked); 
     $(this).clearlight(); 
     $(this).clicked = false; 
     } 
    }); 
    }); 

    $(area_ref).hover(function() { 
    $(this).handleMouse().each(function() { 
     $(this).highlight(defaults.color); 
    }); 
    },function() { 
    if (!$(this).clicked){ // I try and access here 
     $(this).handleMouse().each(function() { 
     $(this).clearLight(); 
     }); 
    } 
    }); 
    return $(this); 
}; 
+1

你必須建立某種聯繫。您可以將索引保存在[數據屬性](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes)或手動綁定每個對象的點擊處理程序(不建議) –

+0

提供一些代碼,你使用'this.propertyName' – Maxx

+0

ahhh,我喜歡數據屬性的想法。我完全忘記了這一點。我現在就試試 – Turk

回答

1

您可以使用jQuery的data function一個對象綁定到DOM元素。所以,你可以不喜歡下面來存儲你的對象:

$('#clickableElement1').data('mapArea', new MapArea(some passed variables)); 

而且類似以下內容可檢索給定一個事件的對象:

var mapArea = $(event.currentTarget).data('mapArea');