gtag链接器不适用于JS form.submit()

时间:2019-04-23 17:50:33

标签: javascript jquery google-analytics gtag.js

我使用了正确的Google标记来启用跨域跟踪。通过单击提交按钮提交表单后,?ga=...将被添加到目标URL,但是如果我通过JS触发了Submit事件,则不会将其添加。

代码如下:

<head>
    <script>
        //All other common JS code exist
        gtag('set', 'linker', {
            'domains': ['example.com'],
            'decorate_forms': true
        });
        gtag('config', 'UA-...');
    </script>
</head>
<body>
    <form method="POST" action="https://example.com/a/b">
        <button type="submit">Submit</button>
    </form>
    <button id="bt">Click to submit form using JS</button> 
    <script>
        $(document).on('click', '#bt', function(e){
            $('form').submit();
        });
    </script>
</body>

如果我在表单中添加提交按钮,然后直接单击它,则目的地将类似于https://example.com/a/b?_ga=...。但是,当我通过JS提交表单时,目标网址就像没有GA附录的表单操作一样。

我必须注意,我使用的是gtag而不是GTM。

1 个答案:

答案 0 :(得分:0)

可以通过两种不同的方式解决它:

方法1 我们可以将“提交”触发器更改为“提交”按钮上的单击触发器。不知道为什么,但是,它解决了这个问题:)

router.post('/update/:id', (req, res) => {
    // Quotes.findOneAndUpdate({ name: req.body.name }, { $push: { quote: req.body.quote } });
    Quotes.findById(req.params.id, function(err, quote) {
        if (!quote) {
            res.status(404).send('Data is not found');
        } else {
            quote.author = req.body.name;
            quote.quotes = { $push: { quote: req.body.quote } };
            quote.date_submitted = req.body.date_submitted;

            quote
                .save()
                .then(quote => {
                    res.json('quote updated');
                })
                .catch(err => {
                    res.status(400).send('Update not possible' + ' ' + err);
                });
        }
    });
});

方法2 除了提交以外,我们可以处理其他任何需要的事件,而不是单击事件。

$(document).on('click', '#bt', function(e){
    $('form button[type="submit"]').trigger('click');
});

尽管问题似乎已解决,但主要问题仍然存在,并且似乎指向gtag或jquery $(document).on('submit', 'form', function(e){ //Do your stuff and handle the event return true; }); 的潜在错误。因此,如果您可以为未解决的问题提供任何解决方案或答案,请继续发布您的帖子,我会以正确的答案来回答。