Как получить доступ к атрибуту id любого элемента в Raphael - PullRequest
8 голосов
/ 15 декабря 2010

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

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"));
}

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

Спасибо

Ответы [ 3 ]

14 голосов
/ 16 декабря 2010

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

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

t.node.id = 'Hello';

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

3 голосов
/ 31 марта 2011

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

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...
}

По сути, вы создаете новое свойство с именем "id" в переменной экземпляра линии Raphael "t". Это своего рода хакерство, на мой взгляд, но оно отлично работает.

2 голосов
/ 15 декабря 2010

Попробуйте установить обработчик, используя 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"));
}
...