2016-09-07 55 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