2016-05-16 22 views
0

最初の投稿は簡単です。Javascript動的にイベントとこのパラメータを持つeventListenerを作成

function drag(ev) { 
    ev.dataTransfer.setData('id', ev.target.id); 
} 

function drop(ev,r) { 
    ev.preventDefault(); 
    var oldRowID = ev.dataTransfer.getData('id'); 
    var newRowNo = r.rowIndex; 
    var tbl = document.getElementById('main'); 
    newRow = tbl.insertRow(newRowNo); 
    oldRow = document.getElementById(oldRowID); 
    newRow.innerHTML = oldRow.innerHTML; 
    newRow.id = oldRowID; 
    newRow.draggable = true; 
    newRow.addEventListener('dragstart',drag(event)); 
    newRow.addEventListener('drop', function() { 
      drop(event,newRow); 
     }); 
    oldRowNo = oldRow.rowIndex; 
    tbl.deleteRow(oldRowNo); 
} 

を私が取得エラー:

<tr 
    id=rw01 
    draggable=true 
    ondragstart=drag(event); 
    ondrop=drop(event,this); 
>some HTML</tr> 

ジャバスクリプトは次のようになります。私は以下のondrop機能が と同じ効果がありますJavaScriptでのEventListenerを作成しようとしている

新しく作成された行のondropイベントによってdrop関数が呼び出されたときです。行番号

var oldRowID = ev.dataTransfer.getData('id') 

戻り値なし - ドラッグイベントが要素IDをドロップ関数に渡していないことを示唆しています。

すべての関数がhtmlから呼び出されています。新しく作成されたイベントハンドラによって呼び出された同じ関数が機能していません。

ありがとうございます。

答えて

0

イベント引数を明示的に渡す必要はありません。代わりに、以下のコード:

newRow.addEventListener('dragstart',drag); 

そして、drag()関数は定義したのと同じになります。今

あなたが唯一のイベント引数を持つ必要があります定義されているドロップ()関数:

function drop(ev) { 

} 

そして、あなたは現在のオブジェクトにアクセスするにはthisオブジェクトを使用することができます。だから、

コードの下に新しく追加された行の使用のためにドロップイベントリスナーを追加しながら:

newRow.addEventListener('drop',drop); 

はまた、HTMLマークアップの下に使用します。

<tr 
    id=rw01 
    draggable=true 
    ondragstart=drag(); 
    ondrop=drop(); 
>some HTML</tr> 

・ホープ、このことができます。

+0

ありがとうございます@ShwethaU私は、挿入された行を処理するリスナーを持っています。しかし、ドラッグされたオブジェクトをドロップした要素のIDを取得する方法はわかりません。 drop()関数は起動しますが、その関数は受信のIDを必要とします。要するに、どの要素がマークアップでドロップ機能を起動したのですか?私はこの情報を得るために 'これ'を渡しました。 'function drop(ev){'では、私が知る限り、evは現在必要ありません。 – Gaz

+0

UPDATE。すべての固定された感謝のヒープ。私は 'event.target.parentElement.id'を使用しましたが、' parentElement'は必要なのは、私がに落としていて、私が親のIDを望んでいたからです。 – Gaz

関連する問題