Как вызвать форму отправки с использованием jQuery
Я пытаюсь отслеживать комментарии к сообщениям в блоге с помощью Google Universal Analytics. Я хочу, чтобы лейбл взял название поста в блоге, поэтому я использую jQuery для запуска события.
Пока у меня есть следующий код (который основан на коде, который я использовал для других сайтов и работает нормально) - очевидно, я что-то упустил, так как он не работает:
$(document).ready(function(){
$('#commentform').submit(function(){
var postname = $('h2.post-title').text();
ga('send', 'event', 'Engagement', 'Comment', postname, 5);
});
});
Какие-нибудь мысли?
(Извините, я бы дал ссылку на блог, но он еще не опубликован)
Спасибо
2 ответа
$(document).ready(function(){
$('#commentform').submit(function(){
var postname = $('h2.post-title').text();
ga('send', 'event', 'Engagement', 'Comment', postname, 5);
});
});
Прежде всего. Этот код назначает текст h2
тег с классом post-title
найдено в document
, Более надежным способом получения названия поста будет идентификатор.
Во-вторых, это может не сработать, поскольку форма отправляется до запуска кода Google Analitycs. Поэтому вы должны остановить поведение по умолчанию и отправить форму после того, как analitycs закончит отправку своих данных. (См.: https://developers.google.com/analytics/devguides/collection/analyticsjs/advanced).
$( document ).ready( function() {
$( document ).on( 'submit', 'form#commentform', function( e ) {
var postname = $( '#post-title' ).text();
ga( 'send', {
'hitType': 'event',
'eventCategory': 'Engagement',
'eventAction': 'Comment',
'eventLabel': postname,
'eventValue': 5,
'hitCallback': function() {
//now you can submit the form
//$('#commentform').off('submit').trigger('submit');
$('#commentform').off('submit'); //unbind the event
$('#commentform')[0].submit(); //fire DOM element event, not jQuery event
}
});
return false;
});
});
Изменить: я только что понял код из hitCallback
может не сработать. Пересмотренная версия должна вызвать событие элемента DOM и в результате - отправить форму.
Edit2: исправлена привязка события, если форма не существует при запуске document.ready()
Трудно сказать, не глядя на реальную страницу, но, вероятно, браузер перенаправляет на отправку формы до того, как будет выполнен сетевой вызов g a. Вам нужен способ дождаться окончания g a, а затем закончить отправку формы.