提问人:Chaitanya Sai 提问时间:11/16/2015 更新时间:11/16/2015 访问量:1458
推送事件 GTM 时嵌套引号的问题
Issue with nesting quotes while pushing event GTM
问:
我正在将事件推送到 GTM,以防出现锚标记,这里的问题是在通过 jQuery 获取数据时,我无法使用引号(单引号或双引号),因为它会破坏代码。我还尝试使用XML和XML转义引号,但仍然无法解决问题。这是我的代码onclick
\(slash)
"
<a title="Comprar" class="btn-pdp-bag"
onclick=" dataLayer.push({
'event':addToCart,
'ecommerce':{
'remove':{
'products':[{'name':'Playera Polo',
'id':'123456' ,
'price':'1340.0',
'category':$('#ancestorLbl').text(),
'subcategory':$('#breadCrumbLbl').text(),
'variant': $('div').find('[data-id=\"ddldynamiccolor\"] span').text(), 'quantity':'1'
}]
}
}
}); href="#"> send Gtm </a>
我需要发送带有报价的数据,但如果我放置报价
$('#ancestorLbl').text()
如果我放置双引号,则将其视为字符串。onclick
同样的问题
$('div').find('[data-id=\"ddldynamiccolor\"] span').text()
在这种情况下,除了引号之外,我还需要对数据选择器使用引号。 请建议我如何解决这个问题,这是小提琴的链接。谢谢
答:
当您尝试将大量代码放入内联函数调用时,会出现问题。虽然通过一定数量的转义字符和删除空格/换行符是完全可以实现的,但我觉得不建议您使用的更优雅的解决方案是错误的。
选项 A - 调用函数
创建一个包含所有代码的函数,并从 onclick 事件中调用它。
选项 B - 动态地将代码绑定到元素
由于您已经在使用 jQuery,因此您可以使用 on() 函数绑定到此元素。这将要求您为链接提供唯一标识符(除非您希望多个链接触发正确的代码)。
因此,给您一个链接的唯一标识符并去除 onclick:
<a id="comprar" title="Comprar" class="btn-pdp-bag" href="#"> send Gtm </a>
现在,当发生单击事件时,将代码动态绑定到此链接
$('document').ready(function(){
$('#comprar').on('click', function(){
dataLayer.push({
'event':addToCart,
'ecommerce':{
'remove':{
'products':[{'name':'Playera Polo',
'id':'123456' ,
'price':'1340.0',
'category':$('#ancestorLbl').text(),
'subcategory':$('#breadCrumbLbl').text(),
'variant': $('div').find('[data-id="ddldynamiccolor"] span').text(),
'quantity':'1'
}]
}
}
});
});
});
选项 C - 保持内联
如果你真的需要保持内联,首先,你应该问为什么。然后,您应该删除所有换行符(加上空格以保持整洁,但这不是绝对必要的)并使用以下内容:
<a title="Comprar" class="btn-pdp-bag" onclick=" dataLayer.push({'event':'addToCart','ecommerce':{'remove':{'products':[{'name':'Playera Polo','id':'123456','price':'1340.0','category':$('#ancestorLbl').text(),'subcategory':$('#breadCrumbLbl').text(),'variant': $('div').find('[data-id=\'ddldynamiccolor\'] span').text(),'quantity':'1'}]}}});" href="#"> send Gtm </a>
使用哪种方法完全取决于您,但我推荐选项 B,因为这样做会更优雅一些。在这种方法中,您将 javascript 功能完全从 HTML 中抽象出来,因此您需要进行的任何更改只需要对 JS 进行更改。您也可以将其放在单独的文件中,并将其包含在您的页面上。
评论