簡體   English   中英

.unbind('submit')。submit()在Chrome / IE中有效,但在Firefox中無效

[英].unbind('submit').submit() works in Chrome/IE but doesn't work in Firefox

我有以下使用jQuery 1.9.1的javascript代碼:

(function ($) {
$(function () {
    eventTracking();
});

function eventTracking() {
    $("[data-formtracking]").bind('submit', function (e) {
        e.preventDefault();
        var eventName = $(this).data("formtracking");
        rt.trackEvent(eventName);
        $(this).unbind('submit').submit();
    });
}})(jQuery);

現在,當我提交表單時,它應該對數據庫進行更新,然后按照表單上的操作進行操作,並基本上將我們重定向到另一頁。

在Chrome / IE中,rt.trackEvent成功啟動,我被重定向到另一個站點。 在Firefox中,我被重定向到另一個站點,但是沒有數據庫條目。

如果在每個語句之間添加console.log,我可以看到它命中了所有log語句。

所以在這一點上。。。 我試過從綁定切換為開/關。 我試過了:$('input [type = submit]',this).click()基於另一個stackoverflow頁面上的傳遞注釋。

一些注意事項:* rt在外部文件中。 我已經檢查並且它確實存在*如果刪除unbind.submit,則rt.trackEvent可以正常工作,但頁面不會重定向(顯然)。 *我將unbind.submit()更改為其他變體,但是然后我必須單擊兩次按鈕才能提交。

有什么想法嗎?

更新

e.preventDefault()和更高版本提交的原因是表單提交發生得太快。 該頁面將在rt.trackEvent正常運行之前重定向。 所以我需要通過添加setTimeout($(this).unbind('submit')。submit(),2000)來減慢該方法的速度。

我刪除了此代碼以簡化代碼,但事后它對於代碼的工作非常重要。

更新2這是被稱為json:

        options = $.extend({ success: $.noop, error: $.noop, urlBuilder: getNoCookieRequestURL, eventName: null }, options);

        options.url = options.urlBuilder(options.url, options.siteId, options.eventName);
        $.getJSON(options.url, function (jsonp) {
            options.success(jsonp);
        }).fail(function () {
            options.error();
        });

更新3

將getJson更改為:

            options = $.extend({ success: $.noop, error: $.noop, urlBuilder: getNoCookieRequestURL, eventName: null }, options);

        options.url = options.urlBuilder(options.url, options.siteId, options.eventName);

        $.ajax({
            url: options.url,
            dataType: 'json',
            async: false,
            success: function (jsonp) {
                options.success(jsonp);
            },
            error: function() {
                options.error();
            }
        });

我似乎仍然遇到速度問題。 當我在Chrome中單步執行代碼時,代碼就可以工作,但是當我運行它時,數據庫無法正確更新。

不要取消綁定,只需提交即可。

// $(this).unbind('submit').submit();
this.submit();

但是,我想知道為什么如果您仍然要提交,那么為什么首先要阻止提交。

(function ($) {
$(function () {
    eventTracking();
});

function eventTracking() {
    $("[data-formtracking]").bind('submit', function (e) {
        //e.preventDefault();
        var eventName = $(this).data("formtracking");
        rt.trackEvent(eventName);
        //$(this).unbind('submit').submit();
    });
}})(jQuery);

所以不確定這是否是世界上最漂亮的,但是現在它可以工作了。。。。

    $("[data-formtracking]").bind('submit', function (e) {
        e.preventDefault();
        form = this;
        var eventName = $(this).data("formtracking");
        rt.trackEvent(eventName);

        setTimeout(function() {
            form.submit();
        }, 100);
    });

基本上,問題似乎與使用jquery解除綁定和重新提交有關,因此我們解決了該問題,改而使用javascript的Submit。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM