Ну, я ничего не знаю о библиотеке Рафаэля, но может показаться, что вы могли бы обернуть свой c.hover
в функцию, вызывающую себя, чтобы создать замыкание, которое ссылается на правильное значение t
.
(function( local_t ) {
c.hover(function (event) {
this.animate({r: 13}, 200);
local_t.show();
}, function (event) {
this.animate({r: 10}, 200);
local_t.hide();
});
})( t );
Таким образом, когда вы создаете обработчик событий hover
, он будет передавать значение t
и ссылаться на него как на локальную переменную t_local
(или любое другое имя, которое вы ему дадите), которая будет сохраняться до (и после) вызывается обработчик.
Таким образом, полный код будет:
for(var i=0; i<feedData.length; i++){
var x = ((i+1)*diff);
var t = r.text(x, 120, feedData[i].title).hide();
var c = r.circle(x,150,10);
c.attr({fill: "red"});
c.attr({stroke: "red"});
c.attr({title: feedData[i].title});
(function( local_t ) {
c.hover(function (event) {
this.animate({r: 13}, 200);
local_t.show();
}, function (event) {
this.animate({r: 10}, 200);
local_t.hide();
});
})( t );
}
РЕДАКТИРОВАТЬ: Вместо этого вы можете обернуть все внутри оператора for()
, но я не думаю, что это будет иметь значение для конкретной проблемы Chrome
, которую вы упомянули в своем комментарии ниже.
for(var i = 0; i < feedData.length; i++){
(function( local_i ) {
var x = ( ( local_i + 1) * diff );
var t = r.text(x, 120, feedData[ local_i ].title).hide();
var c = r.circle(x, 150, 10);
c.attr({fill: "red"});
c.attr({stroke: "red"});
c.attr({title: feedData[ local_i ].title});
c.hover(function (event) {
this.animate({r: 13}, 200);
local_t.show();
}, function (event) {
this.animate({r: 10}, 200);
local_t.hide();
});
})( i );
}