2012-07-17 62 views
0
window.unload問題

我用下面(純粹是出於測試目的)代碼:一些關於jQuery的

$(window).bind('unload', function() {alert('unload!')}); 
$(window).unload(function() {alert(".unload()")}); 

而且我有兩個問題:

  1. 爲什麼確實有效 - 即爲什麼我會看到兩條消息?我在某處讀到將兩個事件監聽器附加到相同的DOM對象時不起作用;第二個和更多的聽衆被忽略。

  2. 爲什麼Firefox在一個標準的類似系統的消息框中顯示這兩個消息,而在使用頁面的過程中觸發的所有其他消息(也是警報)總是顯示在這個醜陋,無標題,煩人的,消息框的東西?

  3. 正如我在評論中寫道,以this question,你真的東西,那阻斷unloadalert()(由鍍鉻/ WebKit的)是一個好主意?使用console.log替代警報(就像這裏所建議的那樣)並不會給你帶來太多有用的效果,因爲在刷新頁面或導航到另一個控制檯之後,控制檯(至少在Chrome中)正在被清除。你可以看到你的消息的痕跡,在它們真正消失之前的幾個毫秒內寫入,所以我寧願覺得它沒用。禁用卸載警報不是最好的主意。很難做一些嚴肅的測試,通過顯示自己的「煩人的」消息,而不是使用警報(jQuery UI,某些div等),「糟糕的」頁面可以輕鬆實現解決方法。

這些問題純粹是爲了滿足我的飢餓知道所有的答案! :]所以,不要認真對待它(比如做一些額外的測試,小提琴例子等)。只是,寫下你對此的瞭解或感受。

回答

1

綁定多個事件處理程序爲同一事件(與jQuery)肯定會導致被解僱。你可能會考慮對「onfoo」元素屬性進行連續賦值,但這不是jQuery(或我所知的任何其他現代框架)在內部使用的機制。

瀏覽器顯示alert()消息,但他們想要的。它不受頁面上代碼的控制。

最後,在「卸載」事件處理程序中禁止alert()是用戶的一個好主意。您可以控制調試控制檯是否跨頁加載清除。

+0

當然,該瀏覽器如何顯示消息框超出頁面的代碼控制的。這對我來說很明顯。我問,因爲我不喜歡Firefox,它是新的消息框,所以我很好奇,爲什麼他們已經恢復顯示「正常」的消息框。 – trejder 2012-07-17 14:43:41

+0

你必須問一個Firefox開發者:-) – Pointy 2012-07-17 14:44:19

+0

嗯...... [MDN](https://developer.mozilla.org/en/DOM/element。addEventListener)說(在「多個相同的事件監聽器」中):「如果多個相同的EventListener在同一個EventTarget上使用相同的參數註冊,則丟棄重複的實例」。 – trejder 2012-07-17 14:44:35

1

(至少在Chrome)被清除後,會刷新頁面或 導航到另一個

設置您的調試器保存控制檯後吧!瞭解您每天使用的工具的功能。

  • 瀏覽器 - 右鍵單擊​​控制檯選項卡,在右鍵菜單中
  • Firebug的選項 - 按鈕,在控制檯
+0

謝謝你指出。 – trejder 2012-07-18 06:30:44