2016-09-21 6 views
1

私は動的に作成する各ボックスにイベントハンドラを割り当てる方法を見つけようとしています。現時点では、ユーザーは「上に追加」または「下に追加」をクリックすることができ、クリックした場所に2行のボックスが表示されます。イベントハンドラがすべての要素で機能しない

また、ユーザーが特定の四角形をクリックすると、colorPickerがポップアップし、その特定の四角形の色を変更できるようにしようとしています。

しかし、何らかの理由で、ユーザーが最初の2行の四角をクリックしたときにのみ、カラーピッカーがポップアップします。さらに多くの行が現在のセットの下または上に動的に追加されると、四角形をクリックすると何も起こりません。

これはなぜ起こっているのでしょうか?

http://codepen.io/anon/pen/bwBRmw

var theParent = document.querySelector(".container"); 
theParent.addEventListener("click", doSomething, false) 
function doSomething(e) { 
    console.log("gets inside doSomething") 
    console.log(e.target) 
    console.log(e.currentTarget) 
if (e.target !== e.currentTarget && e.target.id !== "") { 
    var clickedItem = e.target.id; 
    console.log("Clicked on " + clickedItem); 
    var led = document.getElementById(clickedItem) 

    if(!picker){ 
     console.log("new picker initialized") 
     picker = new Picker(led) 
    } 
    else{ 
     console.log("gets inside else case") 
     picker.settings.parent = led; 
    } 
    picker.show(); 

} 
picker.on_done = function(colour) { 
    $(led).css('background-color',colour.rgba().toString()); 
    picker.hide() 
    } 

//e.stopPropagation(); 
} 
+2

、それだけでjQueryのイベントの委任を行うに付ける機能で構築を使用することが非常に簡単ではないでしょうか? – adeneo

+0

[on'のドキュメント](http://api.jquery.com/on/)には、啓発されているかもしれない委任イベントに関するセクションがあります。 –

+0

@adeneo私はコンソールにログを記録するとき、私のプログラムは異なる四角をクリックできることを検出するので、なぜ正しく動作しないのか分かりません。 jqueryと同じように、イベントリスナーを親要素に追加しました。 – blazerix

答えて

1

は、2行目でこれを試してください:あなたはjQueryのを使用している

$(document).on("click", ".container", doSomething); 
+0

応答をありがとう、しかし、私は新しい行を追加すると、何もポップアップしない – blazerix

+0

本当に?あなたのコードの1行目と2行目を上記のものに置き換え、すべての新しい行に適用しました。 –

+0

codepenでリンクできますか? – blazerix

0

これはあなたの問題のすべてを解決しないかもしれませんが、あなたは、クリックからe.preventDefault();を削除する場合:

$("body").on('click', ".repeat", function (e) { 
     e.preventDefault(); 

私がこれまで試した/やっていること

新しく作成された各セクションの色を変更することができます。それが役に立てば幸い?

+0

本当ですか?私はちょうどその行を削除した後、新しいセクションを追加し、カラーピッカーがポップアップしない – blazerix

関連する問題