0

私はモバイルアプリに取り組んでおり、現在このon()方法を使用してスワイプして削除する機能を実装しています(これを可能にするライブラリがあることを理解しており、メリットについての考えを自由に受け入れますさまざまなオプションの)。次のようなコードがあります。

 var favArticles = $('#favoritesList li');
 favArticles.each(function(i, li){
     var id = $(li).attr('id');
     $(li).on("swipeLeft",function(){
         //console.log('SwipeLeft ' + id);
         var html = $(li).html();
         var button = '<div ><button onclick="favDelete(id, i)">Delete</a></div>';
         $(li).html('<div style="position:relative;">' + html + button + '</div>');
     });
 });

変更可能な記事のリストを管理しようとしているので、お気に入りリストをレンダリングするたびに、現在のすべての記事を取得し、スワイプ イベントをそれらにバインドします。スワイプすると、記事の上にボタンが表示され、ユーザーがボタンを押すと、スワイプしたリストをリストから削除し、保存されているお気に入りから削除する関数が実行されます。

favDelete 内で、インデックスを使用しiて正しいli. これは、要素が削除されるたびに、更新された i の値ですべてのイベントを再作成する必要があることを意味します。

それで、私の質問:on()同じ DOM 要素の同じイベントに対してもう一度呼び出すと、古いバインディングは上書きされますか? それとも、リスト要素に常に新しいon()アクションを追加することでメモリ リークが発生するのでしょうか?

更新: はい、Javascript ではなく JQuery です。申し訳ありません。そして、私の favDelete 呼び出しが示されているように機能しないことはわかっています。読みやすさを向上させるために、投稿の引用符の束を切り捨てました。

4

3 に答える 3

0

ハードコーディングされたインデックスではなく、これを行う 2 つの方法があります。

  1. ID を使用して正しいLI要素を選択します (favDelete 関数で)
  2. インデックスの代わりにセレクターを渡します (つまり$(this).closest('li'))
于 2013-06-03T18:58:27.540 に答える