2012-06-09 52 views
3

我已將一個名爲scrollpaper的插件添加到我正在處理的網站中。該插件用於兩個靜態頁面,並在html片段上附加到該網站。刪除導致錯誤的附加元素

的問題是,當在所附片段,其調用函數被去除,使用:

$(this).remove(); 

我得到與所述scrollpaper插件以下錯誤:

TypeError: 'undefined' is not an object (evaluating 'data.clearer') 

發生錯誤的片段被移除的時刻。它不會導致任何實際的性能問題,並且當我重新附加片段時,插件仍被成功調用並執行,但錯誤確實堆積了起來,我非常想解決它們。

主要插件文件包含在每個頁面的底部,與靜態頁面進行調用下面所添加:

<script src="js/jquery.scrollbarpaper.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('.scrollpaper-trigger').scrollbarPaper(); 
}); 
</script> 

第二個呼叫被添加到附加的HTML:

<script> 
$(function() { 
    $('.scrollpaper-trigger-lightbox').scrollbarPaper(); 
}); 
</script> 

你可以看到網站與錯誤:http://foleys.be/new-site/index.php

如何重現問題:

  1. 打開網頁檢查/火錯誤
  2. 啓動要麼全,方,設置菜單或準備金在線表格
  3. 無論是通過點擊疊加/關閉按鈕關閉打開的元素,或切換菜單在菜單頁面的底部。
  4. 這將觸發錯誤

要解決自己的問題,我到目前爲止已經試過只加入鹼插件文件所附的元素(而忽略靜態網頁),我也嘗試使用.html('').empty('')。代替.remove(),但這並沒有幫助。

我只使用JQuery工作了幾個月,所以儘管我已經熟悉它是如何工作的,並且我很想學習最佳實踐。然而,目前這個問題已經超出了我的想法,所以任何和所有的幫助都會受到極大的讚賞。

菜單翻轉腳本:

$('.other-menus a').click(function() { 
var url = $(this).attr('data-url'); 

$('.switch').fadeOut(500, 
function() { 
$(this).detach(); 
$('<div></div>').load(url).fadeIn(800).appendTo('.switch-wrap'); 

}) 

}); 
+1

+1想解決甚至非阻塞問題。您是否嘗試過暫時刪除Scrollpaper並查看您的錯誤是否仍然存在? – Bojangles

+0

歡呼聲,總是最好的理解爲什麼有些事情會發出錯誤,因爲你永遠不知道什麼時候會把它變成更嚴重的事情。 – Dave

回答

1

您刪除使用.remove從DOM元素,但是這將清除所有.data項目,包括存儲在"scrollPaper"鍵的對象。 scrollpaper插件正在訪問從.data("scrollPaper")檢索到的對象的屬性,因此當它開始返回undefined時,它會引發異常。

你想.detach相反在scripts.js

$(this).detach(); //Removes Element From DOM 
+0

這絕對是問題的根源!非常感謝解釋。雖然出現了一個小錯誤,但我已經更改了scripts.js和menu.js中的方法,並且在關閉Lightbox現在可以解決問題的同時,如果您多次單擊它們,導航菜單會拋出重複的內容。任何想法,我已經上傳更新版本到相同的地址。 我用菜單翻轉腳本更新了OP。 – Dave

+0

@Dave:對不起 - 您能否詳細說明如何重現?作爲一個側面說明,您的網站是相當CPU密集型。當網站閒置時,它佔用我CPU的10%;你可能也想看看,以及... – pimvdb

+0

爲領導乾杯。它使用了很多CSS3動畫,所以我會在可能的情況下查看有關色調的信息。 要重現此問題,請啓動側欄中的任何菜單選項(完整,設置,派對)。在菜單的右下角,您可以選擇切換其他菜單,並且在這裏它會在應該更新的div內創建大量重複的內容。感謝您的支持。 :) – Dave