2010-06-07 5 views
0

В настоящее время у меня есть функция, которая создает петли для создания нескольких объектов HTML. Каждый раз, когда объект создается, я хочу добавить к этому объекту прослушиватель функций onClick, чтобы я мог запускать функцию, когда нажимается каждый.Не удалось добавить прослушиватели событий через JavaScript

Каков наилучший способ для этого?

Вот код, который создает свои объекты:

RenderMultipleChoice:function() 
{ 
    this.c = paper.rect(this.x, this.y, this.shapeWidth, this.shapeHeight); 
} 

ответ

2

Возможно, вы захотите использовать event delegation вместо добавления прослушивателя кликов для каждого созданного элемента. Тогда у вас есть только один прослушиватель событий для родителя и посмотрите, из какого элемента произошло событие. Он также будет волшебным образом работать для элементов, созданных в будущем.

JQuery имеет два способа справиться с этим для вас:

  • .live() - привязки слушателя событий к элементу тела (имеет недостатки)
  • .delegate() - привязки слушателя событий к (Parent) элементы, которые вы укажете (более высокую производительность)

Пример:

$("#parent").delegate(".child", "click", RenderMultipleChoice); 

жить удивительной функция, но вы должны знать, что это недостатки:

Performance difference between jQuery's .live('click', fn) and .click(fn)

http://paulirish.com/2010/on-jquery-live/

+0

Я до сих пор не знал о делегировании событий, спасибо за это. Похоже на то, что я делаю. –

1

Вы можете использовать addEventListener или attachEvent. Предполагая, что paper.rect возвращает элемент DOM:

if(this.c.addEventListener) 
{ 
    this.c.addEventListener("click", listenerFunction, false); 
} 
else 
{ 
    this.c.attachEvent("onclick", listenerFunction); 
} 

Есть библиотеки, чтобы отвлечь это.

+0

на самом деле вы должны использовать оба, если вы собираетесь иметь какое-то перекрестную совместимость браузера. – azatoth

+0

Большое спасибо. –

Смежные вопросы