2010-12-15 1 views
8

Я использую Raphael для рисования некоторых элементов на веб-сайте. Элементы включают прямоугольник, линию (путь). Я дал идентификатор элементу пути и попытался получить к нему доступ в событии onclick этой строки. но когда я делаю предупреждение о id, ничего не видно. Ниже приведен фрагмент кодаКак получить атрибут id любого элемента в Raphael

function createLine() 
{ 
    var t = paper.path("M" + xLink + " " + yLink +"L" + linkWidth + " " + linkHeight); 
    t.attr('stroke-width','3'); 
    t.attr('id','Hello'); 
    t.node.onclick = processPathOnClick; 
} 

function processPathOnClick() 
{ 
    alert($(this).attr("id")); 
} 

Может кто-нибудь скажет мне, в чем проблема с вышеуказанным кодом. Любой указатель будет полезен.

Благодаря

ответ

14

Вы уверены, что вы не хотите писать $(t.node).attr('id','Hello'); вместо?

Обновление: кто-то просто отклонил этот ответ. И я действительно чувствую себя обязанным указать, что этот способ определения идентификатора не особенно хорош. Вы бы лучше использовать:

t.node.id = 'Hello'; 

Я хотел бы был способ кредитовать Хуан Мендес, кроме upvoting его комментарий к этому ответу.

2

Попробуйте установить обработчик с помощью JQuery

function createLine() 
{ 
    var t = paper.path("M" + xLink + " " + yLink +"L" + linkWidth + " " + linkHeight); 
    t.attr('stroke-width','3'); 
    t.attr('id','Hello'); 
    $(t.node).click(processPathOnClick); 
} 

function processPathOnClick() 
{ 
    alert($(this).attr("id")); 
} 
+1

Hi Juan, Настройка обработчика не работает. Я изменил атрибут установки на t.node.setAttribute ('id', pathId); и доступ к нему для предупреждения ($ (this) .attr ('id')); Это сработало – sgbharadwaj 2010-12-15 21:02:21

+0

Ну, тогда это говорит о том, что параметр id на объекте Raphael не устанавливает его на узле. Не нужно использовать jquery для установки идентификатора. Ваш код был бы намного проще, выполнив `t.node.id = 'my-id'`, и ваш обработчик мог бы просто использовать` alert (this.id) ` – 2010-12-15 21:15:38

3

Попробуйте это:

function createLine() { 
    var t = paper.path("M" + xLink + " " + yLink +"L" + linkWidth + " " + linkHeight); 
    t.attr('stroke-width','3'); 
    t.id = 'Hello'; 
    t.node.onclick = processPathOnClick; 
} 

function processPathOnClick() { 
    alert($(this).id); 
    alert(this.id); // This should work too... 
} 

В основном вы создаете новое свойство под названием «идентификатор» на Raphael линии переменного экземпляра «т». На мой взгляд, это хак, но это трюк.