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 に 2 番目の呼び出しが追加されます。

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

問題を再現する方法:

  1. Web インスペクタを開く/バグを発生させる
  2. フルメニュー、パーティーメニュー、セットメニュー、またはオンライン予約フォームのいずれかを起動します
  3. オーバーレイ/閉じるボタンをクリックして開いている要素を閉じるか、メニュー ページの下部にあるメニューを切り替えます。
  4. これにより、エラーが発生します

自分で問題を解決するために、これまでのところ、追加された要素に基本プラグイン ファイルを追加することだけを試みました (静的ページは無視しました.html('')) .empty('')。の代わりですが.remove()、それは役に立ちませんでした。

私は JQuery を使い始めてまだ 2 か月しか経っていないので、すべての仕組みに慣れつつあり、ベスト プラクティスを学びたいと思っています。ただし、この問題は現時点では私を超えているため、すべての助けをいただければ幸いです。

メニュー反転スクリプト:

$('.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から要素を削除していますが、これにより、キーに格納されているオブジェクトを含む.removeすべてのアイテムがクリアされます。スクロールペーパープラグインは、から取得したオブジェクトのプロパティにアクセスしているため、戻り始めると例外がスローされます。.data"scrollPaper".data("scrollPaper")undefined

代わり.detachscripts.js

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