3

我在我正在开发的网站上添加了一个名为 scrollpaper 的插件。该插件用于静态页面和我附加到网站的 html 片段。

问题是,当调用函数的附加片段被删除时,使用:

$(this).remove();

我收到以下与滚动纸插件有关的错误:

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>

如何重现问题:

  1. 打开网络检查器/触发错误
  2. 启动完整、派对、套餐或在线预订表格
  3. 通过单击覆盖/关闭按钮关闭打开的元素,或在菜单页面底部的菜单之间切换。
  4. 这将触发错误

为了自己解决问题,到目前为止,我只尝试将基本插件文件添加到附加元素(并忽略静态页面),我也尝试过使用.html('')and .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');

})

});
4

1 回答 1

1

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

你想.detach改为scripts.js

$(this).detach(); //Removes Element From DOM
于 2012-06-09T09:36:29.607 回答