2012-01-09 12 views
1

単純なtodoアプリケーションを開発しようとしていますが、jQueryで作成された要素は、セットアップしたショートキーでは削除できません。私が作ったショート・キーは、最初の要素(および最初からページにある他の要素)では動作しますが、jQuery経由でDOMに入った要素は削除できません。ここでjQueryで添付された要素を削除する

<script> 
    $(document).ready(function() { 
     $('textarea.todo').focus(function() { 
      $(this).elastic(); 
     }); 

     $('textarea.todo').focusout(function() { 
      $(this).animate({ height: "2em" }, 500); 
      $(this).scrollTop(0); 
     }); 

     $('#addTodo').click(function(){ 
      $('<textarea class="todo" rows="1"></textarea>').appendTo('#todos'); 
     }); 

     $('.todo').bind('keydown', 'alt+ctrl+d', function(){ 
      $(this).fadeOut('Slow'); 
     }); 
    }); 
</script> 
</head> 

<body> 
    <div id="header"> 
     Simple<span id="alt">TODO</span> 
    </div> 
    <div id="todos"> 
     <textarea class="todo" rows="1"></textarea> 
    </div> 
    <div id="footer"> 
     <div class="left"><img src="PlusSign.png" id="addTodo"/></div> 
     <div class="right">HELP</div> 
    </div> 
+10

外部サイトへのリンクは、質問に役立つ*補助*となることができますが、常に関連するコード*を質問自体*に投稿してください。 (コードがたくさんある場合は、問題を再現する最小のテストケースを作成する必要があります)。スタックオーバーフローは、今のところあなたのためのリソースではなく、将来同様の問題を持つ他の人のためのものです。外部リンクは変更、削除、移動などが可能で、将来の質問やその回答を正確に無用にすることができます。 –

答えて

3
$('.todo').bind('keydown', 'alt+ctrl+d', function(){ 
            $(this).fadeOut('Slow'); 
        }); 

on()の代わりbindを使用しています。この場合、新しく作成された要素は自動的に購読されます。

$(document).on('keydown', '.todo', function(e){  
     if (e.ctrlKey && e.altKey && e.keyCode == 68) 
      $(this).fadeOut('Slow'); 
}); 

コード:http://jsfiddle.net/FgZaR/3/

+0

この回答は、要素をalt、ctrl、またはD.に反応させます。編集:すべてのキーボード・プレスだけでなく、要素を削除します。 –

+1

コードを更新しました。最新バージョンを確認してください。 – Samich

+0

今はもっとうまくいっています!助けてくれてありがとう:) –

1

答えが、この場合には、ハンドラが追加された後の要素が追加されました(要素だけではありませんでした)ということは基本的であり、あなたのjQueryのバージョンに応じて、そこにありますいくつかのオプションを使用できます。

結合。

0

AddTodoメソッドで要素を追加すると、ショートカットイベントは追加されません。

$('#addTodo').click(function(){ 
    $('<textarea class="todo" rows="1"></textarea>').appendTo('#todos').bind('keydown', 'alt+ctrl+d', function(){ 
     $(this).fadeOut('Slow'); 
    }); 
}); 
+0

これはまったく動作しませんでした。 –

0

私はこのようにそれをやった、それが働いた:おそらく

  $('#addTodo').click(function(){ 
      $('<textarea class="todo" rows="1"></textarea>').appendTo('#todos'); 
      $('.todo').bind('keydown', 'alt+ctrl+d', function(){ 
       $(this).fadeOut('Slow'); 
      }); 
     }); 

ない最善の解決策が、それは少なくとも働きました。

+0

しかし、それはスクリプトのいくつかの他のものを台無しにした... –

関連する問題