2012-01-23 16 views
0

jQueryが動的に作成された要素に適用されないのはなぜですか?ここで追加された(追加された、前の)divにjQueryを適用するには?

はjsFiddleは次のとおりです。http://jsfiddle.net/Y5RuC/19/

あなたはそれが境界線を変更し、通常のセルをクリックします。 生成されたセルをクリックすると何も起こりません。 なぜですか?そして、生成された細胞を機能させるためには、何を変更する必要がありますか?

$(".cell").click(function() { 
     console.log(this); 
     $(this).css("border", "3px solid black"); 
    }); 

それは自動的に動作しません:クリックで境界線を変更します)

generatedDiv = generateBoard(); 
$("#menu").after(generatedDiv); 

3:追加)のdivを

function generateBoard() { 
    var generatedDiv = "<div class='board'>"; 
     /* ... 
      generatedDiv += "<div class='cell'>&nbsp;</div>"; 
      ... 
     */ 
    generatedDiv += "</div>" 
    return generatedDiv 
} 

    $("#generate").click(function() { 
     generatedDiv = generateBoard(); 
     $("#board").after(generatedDiv); 
    }); 

2:

1)ボードを作成します。生成されたコンテンツ。純粋なHTMLで: ちょうどうまくいきます。生成されたボードで - ちょうどここjFiddleがあるもう一度:(ません:。?http://jsfiddle.net/Y5RuC/19/

$( "セル")のためにそれを作るためにどのように生成されたボードで正常に動作するをクリックし

+0

作業バージョンにあなたの[JSFiddle](http://jsfiddle.net/gdoron/Y5RuC/21/)更新を使用することができます1.7以上のjQueryを使用している場合。 – gdoron

答えて

3
$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

onバージョン:

$("body").on("click", ".cell", function(){ 
     console.log(this); 
     $(this).css("border", "3px solid black"); 
}); 

JSFiddle

jQueryの作業

+1

jQuery <1.7の場合でも 'live'は使用しないでください。代わりに 'delegate'を使用してください。 @JamesAllardice。 –

+0

まあまあ。すべてのバージョン関数を追加しました。 – gdoron

+0

うんうん!手伝ってくれてありがとう :) –

0

イベントを添付するには、delegate()またはlive()のいずれかの方法を使用する必要があります。これは、現在または将来一致するすべての要素で機能します。 delegate()が好ましい方法です。

それとも、あなたがon()docs

関連する問題