2013-04-29 2 views
1

Я интегрирую внешнюю библиотеку в мой проект. К сожалению, эта внешняя библиотека использует Prototype, а мой проект зависит от jQuery. Я имею эту работу для следующей задачи, за исключением:jQuery.clone() & keep Prototype.js наблюдатель событий, примененный через Event.observe()

  1. На странице загрузки, Prototype применяется наблюдатель событий через Event.observe() к DOM элементу на странице
  2. После некоторого взаимодействия с пользователем, этот DOM элемент затем клонировали с использованием jQuery.clone() так что его можно использовать в другой части страницы

К сожалению, клонированная копия не связана с прослушивателем Prototype Event.observe().

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

Кто-нибудь знает, как я могу создать копию элемента без его потери обработчиков событий Prototype?

ответ

0

Учитывая этот HTML

<div id="mydiv">with content</div> 

Это клонирует элемент

var newdiv = $('mydiv').clone(); 

Если вы хотите иметь сделать глубокий клон и клонировать все дочерние элементы клона, а также передать true

var newdiv = $('mydiv').clone(true); 

Однако th e clone() метод не копирует наблюдателей - поэтому я предлагаю поставить наблюдателя выше в DOM, чтобы следить за событиями, которые появляются на нем.

Учитывая этот HTML

<div id="mydiv" class="cloneclick">with content</div> 

и присоединение к <body>, например, клонированный DIV-прежнему будут иметь cloneclick класс и по-прежнему будет вызывать обработчик события

$$('body').first().on('click','.cloneclick',function(){ 
    alert('click happened'); 
}); 
+0

Да, я тоже, хотя о движении наблюдателя на более высокий уровень. Я пытался избежать этого, так как я не знаю первый бит о Prototypejs. –

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