有人能告诉我为什么下面的javascript代码会导致一次点击后7次调用renewSession()吗?
$(document).ready(function () {
$("*").mouseup(function () {
renewSession();
});
});
function renewSession() {
$.ajax({
url: "/Account/RenewSession",
type: "POST"
});
}
答案 0 :(得分:6)
可能是因为mouseup
事件通过DOM树向上传播,并且您正在将处理程序应用于文档中的每个元素。所以它会触发第一个元素,然后触发父元素,依此类推,直到它到达html
(或body
,我再也不记得每次都检查了。)
您可以使用:
$(document).ready(function () {
$("*").mouseup(function (e) {
e.stopPropagation();
renewSession();
});
});
防止多次通话。
<小时/> 已编辑以解决来自thiag0的评论:
感谢您的快速回复...我每次用户点击网站时都会调用renewSession()以保持会话处于活动状态。此解决方案可防止在单击中多次调用renewSession,但会阻止用户单击的实际意图触发。无论如何要解决这个问题?
您可以定位body
元素;只要允许事件通过DOM树传播(只要你没有在点击的元素(或'mouseup'ed)之间的元素上调用event.stopPropagation()
,那么事件将传播到body
。所以我建议使用:
$(document).ready(function () {
$("body").mouseup(function () {
renewSession();
});
});
答案 1 :(得分:1)
* selctor匹配7个元素......
html中的事件冒泡DOM树,除非明确告知停止,因此将为与选择器匹配的树上的每个元素触发事件(在这种情况下全部都是!)。
如果这不是您的预期行为,请使用更具体的选择器,或调用stopPropagation方法。