2016-09-22 114 views
0

我的代碼中有多個文檔就緒事件偵聽器。處理多個文檔就緒事件偵聽器

$(document).ready(function() { 
    console.log("hello james") 
}); 

$(document).ready(function() { 
    console.log("hello cindy") 
}); 


$(document).ready(function() { 
    console.log("hello dave") 
}); 

我只想在用戶訪問該頁面時準備打電話給第一個文檔。我不需要其他兩個文件準備就緒。

我不能使用全局變量來檢查這個。我希望能做的是使用bind。我的理論是通過設置代碼...

$(document).bind("ready", function() { 
    console.log("hello james") 
}); 

$(document).bind("ready", function() { 
    console.log("hello cindy") 
}); 


$(document).bind("ready", function() { 
    console.log("hello dave") 
}); 

只有第一個綁定會調用。這是我目前對bind工作原理的理解。

現在,這裏是踢球者。我需要發生的是一旦這些綁定運行(我只希望第一個綁定被執行,因此「hello james」在我的控制檯日誌中打印出來),我需要解除綁定準備好的文檔。我正在考慮做...

$(document).bind("ready", function() { 
    console.log("hello james") 
    $(document).unbind("ready"); 
}); 

$(document).bind("ready", function() { 
    console.log("hello cindy") 
}); 


$(document).bind("ready", function() { 
    console.log("hello dave") 
}); 

但是,這並不起作用。 「你好詹姆斯」將被記錄,但準備好的事件不會解除綁定。我在這裏錯過了什麼嗎?我究竟做錯了什麼?

+0

根本不應該這樣做,如果這是解決某個問題的唯一方法,那麼就會有嚴重的缺陷。 – adeneo

+0

爲什麼你需要這樣的3個功能?一種解決方案是隻有一個'$(document).ready'函數,並從其中調用另外兩個函數 – Howzieky

+0

感謝您向我介紹「bind()」,但您的理解似乎與https:/ /developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind – racraman

回答

0

您可以試試event.stopImmediatePropagation()
這防止執行綁定到相同的事件的任何其他處理程序:

$(document).on("ready",function(e) { 
 
    e.stopImmediatePropagation(); 
 
    console.log("hello james"); 
 
}); 
 
$(document).on("ready",function(){console.log("hello cindy");}); 
 
$(document).on("ready",function(){console.log("hello dave");});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
的jsfiddle:https://jsfiddle.net/L6j23hao/2/

(I改變.ready(.on("ready",因爲否則代碼段和兩個jsfiddle不會工作/產生一個錯誤,但我不明白爲什麼。據我所知.ready(應該工作得很好。)