Как вызвать форму отправки с использованием 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, а затем закончить отправку формы.

Другие вопросы по тегам