多个jQuery.on()事件无法运行xBrowser(取决于顺序)

Multiple jQuery .on() events not working xBrowser (dependent on order)

本文关键字:运行 xBrowser 顺序 取决于 事件 jQuery on 多个      更新时间:2023-09-26

为了支持Firefox,我使用"DOMMouseScroll"事件来代替鼠标滚轮。我不确定我为什么会出现以下行为:

以下内容将允许DOMMouseScroll在Firefox中工作,但我的滚动或鼠标滚轮事件不会触发。

$contents.on 'scroll, mousewheel, DOMMouseScroll', @handleScroll

但当我把绑定分离出来时,Chrome和Firefox中的一切都很好。

$contents.on 'scroll, mousewheel', @handleScroll
$contents.on 'DOMMouseScroll', @handleScroll

如果我重新排序如下,我会让chrome重新工作,但不会让firefox:

$contents.on 'scroll, DOMMouseScroll, mousewheel', @handleScroll

很明显,顺序很重要,鼠标滚轮是最后一个绑定,所以它可以在DDOMMouseScroll上工作,将它们分离是解决方案。我只是想知道为什么。

当我查看.on()的jQuery源代码时,我看到:

function (types, selector, data, fn, one) {
    var type, origFn;
    if (typeof types === "object") {
        if (typeof selector !== "string") {
            data = data || selector;
            selector = undefined;
        }
        for (type in types) {
            this.on(type, selector, data, types[type], one);
        }
        return this;
    }

type-in-types循环不应该提供与创建单独的绑定相同的效果吗?

on方法中不应该有逗号:

$contents.on 'scroll mousewheel DOMMouseScroll', @handleScroll

在您的案例中,jQuery正在侦听类似scroll,DOMMouseScroll,的事件。

jQuery文档:https://api.jquery.com/on/