删除附加元素导致错误

时间:2012-06-09 09:12:26

标签: jquery append

我在我正在处理的网站上添加了一个名为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. 这将触发错误
  5. 为了解决这个问题,我到目前为止只尝试将基本插件文件添加到附加元素(并忽略静态页面),我还尝试使用.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 个答案:

答案 0 :(得分:1)

您正在使用.remove从DOM中删除该元素,但这将清除所有.data项,包括存储在"scrollPaper"项中的对象。 scrollpaper插件正在访问从.data("scrollPaper")检索到的对象的属性,因此当它开始返回undefined时,它会抛出异常。

您需要.detach代替scripts.js

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