2014-10-31 34 views
1
$(document).on({ 
    "mousewheel": scrollHandler, 
    "DOMMouseScroll": ("onmousewheel" in document) ? null : scrollHandler, // Firefox 
    "keydown": keyHandler, 
    "mousedown": function(e) { 
     if(e.button === 1) { 
     e.preventDefault(); 
     return false; 
     } 
    } 
    }); 

我知道这段代码正在侦听向下滚动,但我确定它是如何工作的。根据documentation for on()该函数接受参数.on(events [, selector ] [, data ], handler)。但是,在我提供的示例代码中,在on()方法中存在散列。应该是哪个参数?jQuery:一次创建多个事件侦听器?

这段代码实质上是一次创建多个eventListeners还是有其他事情我不明白?

回答

2

在jQuery .on()方法的格式中,第一个参数是一个普通的javascript对象,其中对象的键是“事件名称”,它们的值是在发生该类型事件时执行的函数。在您的示例中,如果检测到mousewheel事件,则会调用名为scrollHandler的函数。如果检测到​​事件,则称为keyHandler的函数将被调用(等等)。

该技术仅仅是一个接一个地具有多个.on()声明的快捷方式。

+0

很酷,谢谢。在这种情况下,你是否也可以解释“(”文件中的onmousewheel“)是如何工作的? – 2014-10-31 00:28:30

+1

@ chopperdrawlion4对我的朋友很开心。这就是所谓的“三元”表达。首先是一个布尔表达式,然后是两个值之间的“冒号”。如果布尔表达式为真,则整个值为value1,否则为value2。实际上,这段代码会问“如果我们在文档对象中有一个名为”onmousewheel“的属性,那么将DOMMouseScroll设置为没有处理程序,否则将DOMMouseScroll设置为由名为scrollHandler的函数处理。 – Kolban 2014-10-31 00:31:43

1

您使用对应于.onsecond主叫签名:

.on(events [, selector ] [, data ]) 

events的描述是:

类型:PlainObject
其中字符串键表示一个或多个对象空格分隔的事件类型和可选的命名空间,并且这些值表示要为事件调用的处理函数。