Служба тестирования Optimizeely A/B широко использует .replaceWith("new HTML")
для легкого тестирования A/B. Это имеет побочный эффект удаления любых прослушивателей событий, которые прослушивали события из замещенных элементов, даже если новые элементы будут иметь одинаковые идентификаторы/классы.Как переупорядочить обработчики событий jQuery после заменыWith, например, при использовании Optimizely
Пример:
DOM содержит:
<div class="something"> <button id="myButton"></button> </div>
прослушаны:
$("#myButton").click(function() { console.log('clicked!'); });
Заменено:
$(".something").replaceWith("some new HTML, containing #myButton");
После шага 3 удар по #myButton
больше не работает, поскольку оригинальный элемент DOM был уничтожен и добавлен новый.
Что было бы хорошим и «чистым» способом решить эту проблему?
Возможные решения
- Знайте свой кодовые и «повторно добавить» соответствующие обработчик событий в эксперименте Optimizely в.
- проблема: тестеры A/B, возможно, не являются настоящими разработчиками программного обеспечения, подумайте, что это хлопот.
- не кажется очень чистым способом
Найти способ выполнения коды после Optimizely, добавлять все приемники событий таким образом. Есть ли хороший способ сделать это?
"событие делегации, используя $ .он()"
использования, как описано здесь: how to replace HTML with jQuery but keep event bindings
- проблема: трудно предсказать, что именно будет A/B тестирование и заменить
Edit: Я использую JQuery 1.11.x
Почему вы не используете 'on()' для каких-либо возможных целей a? B? –
У меня есть некоторые вызовы '.blur()' и '.click()' в моей текущей проблеме atm. Разве это не просто псевдонимы для '.on ('blur', fn)' и '.on ('click', fn)'? – elnygren
Это не псевдонимы. Грубое объяснение - '$ ('identifier'). On()' будет прослушивать любые элементы, соответствующие «идентификатору», тогда как 'click()' или 'blur()' присоединяет слушателей только к существующим элементам. Дополнительная информация по адресу: http://stackoverflow.com/questions/9122078/difference-between-onclick-vs-click –