我需要检查用户是否关闭浏览器。没有可靠的方法,但最准确的方法似乎是使用onbeforeunload
并检查是否点击了链接或按钮。我还将添加f5和其他一些额外的检查。
但我有按钮问题。如果我单击按钮,即使存在if(window.link_was_clicked==false)
条件,也会进行ajax调用。
<button onclick="setLocation('http://dev.site.com/checkout/')" class="button" title="Checkout" type="button"><span><span>Checkout</span></span></button>
脚本:
jQuery(document).on('click', 'button', function(event) {
window.link_was_clicked= true;
});
window.onbeforeunload = function() {
if(window.link_was_clicked==false){
//make ajax call
}
};
似乎问题是因为按钮onclick
附加了setLocation函数。有没有办法先触发jQuery(document).on
?
答案 0 :(得分:0)
加载前该变量不存在。所以将它添加到顶部并再试一次
window.link_was_clicked=window.link_was_clicked||false;
jQuery(document).on('click', 'button', function(event) {
window.link_was_clicked= true;
});
window.onbeforeunload = function() {
if(window.link_was_clicked==false){
//make ajax call
}
};
答案 1 :(得分:0)
由于您尚未提供setLocation()
的代码,我将假设问题出在那里。现在,关于点击事件处理程序的执行顺序的更改:
一般来说,嵌入式onclick
和jquery绑定处理程序都很糟糕,它会导致各种混淆。但是,如果您无法更改html,则可以执行此人建议的操作:https://stackoverflow.com/a/7507888/2685386
$(document).ready(function() {
var myClick = $('button').attr('onclick');
$('button').removeAttr('onclick');
$(document).on('click', 'button', function(e) {
window.link_was_clicked=true;
// do my other stuff here....
eval(myClick);// this will now call setLocation()
});
});