#javascript #jquery #google-optimize
#javascript #jquery #google-оптимизация
Вопрос:
Я пытаюсь клонировать кнопку в Google Optimize (или любой другой метод javascript / jQuery), которая добавляет товар в корзину покупок. Моя проблема в том, что когда я запускаю код или экспериментирую в Optimize, кнопка не срабатывает.
Вот мои две разные попытки. Метод 1 через интерфейс Optimizes.
- Выберите кнопку для копирования, используйте «редактировать код», чтобы получить html.
- Используйте Insert HTML a расположение новой кнопки и вставьте код.
Версия 2 использует jQuery clone()
;
$('#SOME-ID > PATH TO THE ELEMENT TO CLONE').clone().attr('id', 'ADD-ID-FOR-GTM-TRACKING').appendTo('#proPriceMobile');
В чем может быть проблема?
Заранее спасибо!
Комментарии:
1. Вполне вероятно, что HTML-код клонирован, а прослушиватели событий — нет?
2. @evolutionxbox Вполне возможно.. как бы мне клонировать прослушиватели событий?
3. Используйте один делегированный обработчик событий для динамического содержимого или, возможно
clone(true, true)
, хотя у меня были смешанные результаты с последним.4. @RoryMcCrossan У меня также были смешанные результаты. Я не могу точно вспомнить, почему и при каких обстоятельствах. Я помню, что это работает не так, как я ожидал.
5. @RoryMcCrossan — не могли бы вы немного уточнить метод clone(true, true). Ценю.
Ответ №1:
Вполне возможно, что ваш эксперимент сработает ДО того, как ваши кнопки загрузятся на вашей странице в вашем реальном браузере.
Вы получаете сообщение об ошибке в консоли?
Мой совет — дождаться загрузки вашей кнопки, прежде чем применять изменения DOM. Если возможно, сделайте все это с помощью JavaScript.
Например, здесь вы можете дождаться загрузки элемента, используя обратный вызов и setTimeout():
// FUNCTION WHICH WAITS FOR YOUR INITAL BUTTON to LOAD
function waitForElement(className, callBack){
window.setTimeout(function(){
// GRAB YOUR ELEMENT
var element = document.querySelectorAll(className)[0];
if(element) {
callBack(className, element);
console.log("Callback successfully fired and code executed...")
} else {
waitForElement(className, callBack);
console.log("This runs every second until your element is loaded on the page..")
}
},1000)
};
// EXECUTE THE CODE IN THIS FUNCTION, WHEN YOUR BUTTON LOADS IN THE DOM
waitForElement(".your-element-classname",function(){
console.log("Button has loaded in DOM...");
// NOW CLONE YOUR BUTTON
});
Когда я клонировал кнопки в прошлом, я терял всю функциональность клонированной кнопки. Поэтому вам может потребоваться перестроить эту функциональность на клонированной кнопке.