我使用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,我可以看到它是命中所有日志语句。
所以在这一点......我很困惑。我尝试过从bind切换到开/关。我尝试过:$('input [type = submit]',this).click()基于另一个stackoverflow页面上的传递注释。
一些注意事项: * rt在外部文件中。我已经检查过它确实存在 *如果我删除了unbind.submit,那么rt.trackEvent正常工作,除了页面没有重定向(显然)。 *我已将unbind.submit()更改为其他变体,但之后我必须在提交之前单击该按钮两次。
思想?
更新
e.preventDefault()及以后提交的原因是表单提交发生得太快了。在rt.trackEvent正常工作之前,页面将重定向。所以我需要通过添加一个setTimeout来减慢方法($(this).unbind('submit')。submit(),2000);
我将其删除以简化代码,但在hindset中,它对于代码的工作非常重要。
更新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中逐步执行代码时代码有效,但是当我运行它时,数据库无法正常更新。
答案 0 :(得分:1)
不要取消绑定,只需提交即可。
// $(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);
答案 1 :(得分:0)
所以不确定这是否是世界上最漂亮的,但它现在有效....这是一个巨大的改进。
$("[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的提交。