Переменная область видимости .. измените это и оно должно работать нормально:
var lineA = tags[i].linea;
var id = tags[i].id;
$(myDiv).bind('click',function(){
document.location.href = 'x.php?a='+ lineA +'&b=' + id;
}).css('cursor','pointer');
Проблема в том, что i
является итератором цикла, поэтому при нажатии myDiv
у него всегда будет последнее значение.
Редактировать : посмотрев на это, я понял, что вы выбрали неправильный подход. После этого вы определяете, где пользователь нажал внутри <div>
и перенаправил в другое место в соответствии с вашим массивом. Для этого должен работать такой код:
var tags = [{ 'x' : '42','y' : '25','id' : '1', 'linea' : '1'},{ 'x' : '378','y' : '24','id' : '2', 'linea' : '1'}];
$("#myDiv").bind('click',function(event) {
var left = event.pageX - $(this).position().left;
for(var i = 0; i < tags.length; i++){
var x = tags[i].x -10;
var y = tags[i].y -10;
var offsetX = x + 20;
var offsetY = y + 20;
if( left >= x && left <= offsetX ){
var lineA = tags[i].linea;
var id = tags[i].id;
document.location.href = 'x.php?a='+ lineA +'&b=' + id;
break;
}
}
});
Код должен быть достаточно ясным, в любом случае невозможно иметь только части элемента с ручным курсором - я советую вам не слишком много возиться, так как это будет действительно сложно .
Тестовый случай .
Редактировать 2 : «кликабельные» части элемента с другим курсором проще, чем я думал, вам просто нужно обработать событие onmousemove
и установить курсор там:
var posLeft = $("#myDiv").position().left;
$("#myDiv").bind('click',function(event) {
var tag = GetHoveredTag(event);
if (tag) {
var lineA = tag.linea;
var id = tag.id;
document.location.href = 'x.php?a='+ lineA +'&b=' + id;
}
}).bind("mousemove", function(event) {
var tag = GetHoveredTag(event);
var cursor = (tag) ? "pointer" : "";
$(this).css("cursor", cursor);
});
function GetHoveredTag(event) {
var left = event.pageX - posLeft;
for(var i = 0; i < tags.length; i++){
var x = tags[i].x -10;
var y = tags[i].y -10;
var offsetX = x + 20;
var offsetY = y + 20;
if( left >= x && left <= offsetX )
return tags[i];
}
return 0;
}
Обновленная скрипка .