![](/img/trans.png)
[英]The Submit Button doesn't work in Chrome or Firefox, but Works in Internet Explorer
[英].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.