1

有人能告诉我为什么下面的 javascript 代码会在单击后导致 renewSession() 被调用 7 次吗?

$(document).ready(function () {
    $("*").mouseup(function () {
        renewSession();
    });
});

function renewSession() {
    $.ajax({
        url: "/Account/RenewSession",
        type: "POST"
    });
}
4

2 回答 2

6

可能是因为mouseup事件通过 DOM 树向上传播,并且您将处理程序应用于文档中的每个元素。所以它会在第一个元素上触发,然后是父元素,依此类推,直到它到达html(或body,如果不每次都检查,我永远记不住)。

你可以使用:

$(document).ready(function () {
    $("*").mouseup(function (e) {
        e.stopPropagation();
        renewSession();
    });
});

防止多次调用。


编辑以解决来自 thiag0 的评论:

感谢您的快速响应......我正在尝试做的是每次用户点击网站时调用 renewSession() 以保持会话处于活动状态。此解决方案可防止 renewSession 在一次单击中被多次调用,但会阻止用户单击的实际意图。无论如何要解决这个问题?

你可以只定位body元素;只要允许事件通过 DOM 树传播(只要您没有event.stopPropagation()在单击的元素之间调用元素(或“mouseup”),那么事件就会传播到body. 所以我d 建议使用:

$(document).ready(function () {
    $("body").mouseup(function () {
        renewSession();
    });
});
于 2011-11-21T22:28:20.720 回答
1

* 选择器匹配 7 个元素...

html 中的事件会在 DOM 树中冒泡,除非明确告知要停止,因此事件将针对向上匹配选择器的树上的每个元素触发(在本例中为所有元素!)。

如果这不是您的预期行为,请使用更具体的选择器,或调用stopPropagation方法。

于 2011-11-21T22:28:42.700 回答