2016-09-07 65 views
2

jQuery代码显示两个alert()框。为什么?我的问题是为什么jquery在resize()触发器后调用自定义事件(即事件名称以“resize”开头)?jquery resize()api confusion

jQuery的版本:1.12.4

回答

3

你的示例代码绑定了两个事件听众resize。第一个使用resize()函数,第二个使用bind(),两者基本相同。第三种选择是使用on()

唯一的区别是,你给了第二听者namespace称为test,通过event namenamespace之间的点(.)分离。但是这仍然是一个resize事件监听器,而不是一个自定义事件!

命名空间可以帮助您分离或分组事件侦听器。例如,您可以删除特定的听众:

$(window).on("resize", function() { 
 
    console.log("- resize"); 
 
}); 
 

 
$(window).on("resize.test", function() { 
 
    console.log("- resize.test"); 
 
}); 
 

 
// trigger resize 
 
console.log("first trigger:"); 
 
$(window).trigger("resize"); 
 

 
// remove all listeners with '.test' namespace 
 
$(window).off(".test"); // or more specific: $(window).off("resize.test"); 
 

 
// trigger resize again 
 
console.log("second trigger:"); 
 
$(window).trigger("resize");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Official event.namespace doc.

-1

当触发事件resize,它会开始处理所有已绑定到它的行动。

您可以根据需要绑定尽可能多的功能。

jQuery的事件声明(resize.whatevername),可以提供一个命名空间,以便稍后解除绑定:

$(window).unbind('resize.test') 

但它仍然是绑定到resize事件

+0

这是** **不是一个自定义事件! – eisbehr