javascript - 我是否正确处理此按钮单击事件?

标签 javascript

我在页面上有一个按钮(id =“searchButton”),单击该按钮会提交表单(帖子)。在发帖之前,我想将一些信息记录到 Google Analytics。所以我有以下 JS 代码来执行此操作:

$(document).ready(function () {
    // Log some information to GA
    $('#searchButton').click(function (e) {
        LogSearch();
        LogDestinations();
        LogTourTypes();
        LogIndependent();
    });
});

我想知道我这样做是否正确?具体来说,我很好奇实际的帖子是否发生在所有四个函数调用之前。或者,所有四个函数调用是否会在表单实际在所有浏览器上一致地发布之前完成?我希望表单能够发布,但我也希望这四个 JS 函数首先执行。

如果有帮助,我将使用 Google Analytics 发送事件的标准方法来调用它们:

ga('send', 'event', "Accommodation Search", "Accommodation Search Counter", "", 0);

以及定义按钮的 HTML:

    <div class="col-xs-12">
        <input type="submit" value="Search" class="btn btn-primary" id="searchButton" />
    </div>

最佳答案

通常他们“可能不会”成功,因为页面正在开始卸载。

如果您的目标是 modern brosers ,您可以使用transport: beacon旨在解决此特定问题的标志:

ga('send', 'event', 'click', 'download-me', {transport: 'beacon'});

但是,这不适用于较旧的浏览器或 IE。

如果您想定位这些浏览器,通常只需将重定向延迟一小段时间,以希望请求能够在此时完成:

$(document).ready(function () {
    $('#searchButton').click(function (e) {
        // Prevent the link from working normally
        e.preventDefault();

        // Log some information to GA
        LogSearch();
        LogDestinations();
        LogTourTypes();
        LogIndependent();

        // Fire up the link after 500 milliseconds
        var href = $(this).attr("href");
        setTimeout(function() {
            document.location.href = href;
        }, 500);
    });
});

如果您确实想要确保发送所有事件,则可以使用 analytics event callback ,将其包装为 promises并像上面一样启动链接。这应该看起来像这样:

$(document).ready(function () {
    $('#searchButton').click(function (e) {
        // Prevent the link from working normally
        e.preventDefault();

        // Log some information to GA, return a promise
        var allEventsSentPromise = SendAllEvents();

        // Fire up the link after promise has resolved
        var href = $(this).attr("href");
        allEventsSentPromise.then(function() {
            document.location.href = href;
        });
    });
});

...但这需要您研究 promise 。

关于javascript - 我是否正确处理此按钮单击事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34515135/

相关文章:

javascript - 使用 Url.action() 传递动态 javascript 值

javascript - 开 Jest 期望 Mongoose 时间戳

javascript - D3.js force directed graph,通过使边缘相互排斥来减少边缘交叉

javascript - 如何从这个 json 字符串中读取数据?

javascript - 根据输入字段的字符数动态扩展输入类型 "text"的高度

javascript - PhantomJS 和 pjscrape - 在某些多个 URL 上失败

javascript - 自动拖动 ".draggable"元素

Javascript div 类检查 onclick

javascript - 自定义选项卡点击时跳转到顶部

javascript - 如何递归调用promise函数