2016-09-21 58 views
2

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

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

しかし、私のプログラムはちょっとバグがあります。ユーザーがクリックした最初の四角形でのみ機能し、colorPickerは再びポップアップしません。

これを修正する方法や、より良い選択肢があれば誰でも知っていますか?

マイコード:私はあなたのCodePenに気づい

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

var theParent = document.querySelector(".container"); 
theParent.addEventListener("click", doSomething, false) 

//var picker = new Picker() 
function doSomething(e) { 
    console.log("gets inside doSomething") 
    console.log(e.target) 
    console.log(e.currentTarget) 
    if (e.target !== e.currentTarget) { 
     var clickedItem = e.target.id; 
     console.log("Hello " + clickedItem); 
     var k = document.getElementById(clickedItem) 
     var picker = new Picker(k) 
     picker.show(); 

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

    //e.stopPropagation(); 
} 
+0

あなたはクリックハンドラをバインドするために使用されるコードを投稿することができます:ページ上の唯一のピッカーがあるので、あなたは、ピッカーの「親」要素をリセットする必要がありますか? –

+0

@GregBurghardtそれはあなたと大丈夫ならば私はそれへのリンクがあります: http://iamsaravieira.com/picker.js – blazerix

+0

'doSomething'関数は、それがイベントハンドラとして呼び出されているように見えます。 'doSomething'を呼び出すコードを投稿したり、この関数をクリックハンドラとしてバインドできますか? –

答えて

1

あなたがdoSomethingのための完全なコードを投稿しませんでした。 picker変数が関数にとってローカルなので、問題があります。コード実行がIFステートメント内に入らない場合、ピッカー変数は決して作成されません。ファンクション外の変数pickerを宣言するコードのコメントを外すだけで、新しいピッカーをインスタンス化するコード行の前にあるvarディレクティブを削除します。 picker.settings.parent = k;

var picker = null; // Initialize global variable 

function doSomething(e) { 
    console.log("gets inside doSomething") 
    console.log(e.target) 
    console.log(e.currentTarget) 
    if (e.target !== e.currentTarget) { 
     var clickedItem = e.target.id; 
     console.log("Hello " + clickedItem); 
     var k = document.getElementById(clickedItem) 

     // Reference the global "picker" variable 
     if (!picker) { 
      picker = new Picker(k) 
     } else { 
      // Set the "parent" element of the picker to the newly clicked element 
      picker.settings.parent = k; 
     } 
     picker.show(); 

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

    //e.stopPropagation(); 
} 
+0

ありがとうございました。残念ながら、特定の四角形をクリックして色を選択すると、別の色をクリックすることはできません。なぜこれが起こっているのか知っていますか?コンソールで、私はまだif条件に達していて、クリックしている正方形のIDを表示しています。 – blazerix

+1

@blazerix:私は自分の答えを更新しました。見てみましょう。私はあなたがする必要があるのは、ピッカーの親をリセットすることだけだと思います。 –

+0

これは、トリックを行ったようですが、あなたはピッカーの親をリセットしなければならない理由を知っていますか?正方形をクリックするたびに、それはif条件を入力し、クリックしている正方形のIDを認識します。 また、複数の行を追加すると、なぜcolorPickerが機能しないのでしょうか? すべての助けを借りてくれてありがとう – blazerix

関連する問題