2017-05-22 3 views
1

私はこのコードを持ってJavascriptのコードは、ボタンクラスが他のクラスでラップされたときに動作していない

<ul> 
<li id="1495488881973"> 
<div class="title">some title</div> 
<div class="comment">some comment</div> 
<div class="delete">Delete</div> 
</li> 
</ul> 

この機能はそのまま残しておけば、削除ボタンをクリックするとクリックされたコメントのみが削除されますそれはすべきだ。

私が抱えている問題は、削除ボタンをラップする他のdivを追加すると、削除ボタンが削除されるということです。例えば

...私はこれを行う場合:今

function commentTemplate({title, comment}) { 
    return ` 
    <div class="panel"> 
    <div class="title">${title}</div> 
    <div class="comment">${comment}</div> 
    <button class="delete">Delete</button> 
    </div> 
    ` 
}; 

を、私はそれがすべてのレコードではなくワンクリックそれが必要のように削除し、削除ボタンをクリックします。

この行のためですか?

if (e.target.classList.contains('delete')) { 

どうすればこの問題を解決できますか?あなたはdivの中にあなたの削除ボタンをラップするとき、あなたのクリックのターゲットはラッピングdiv要素となりますので

comments.addEventListener('click', (e) => { 

    var reviewNode = e.target.parentNode 

    if (e.target.classList.contains('delete')) { 
    var id = reviewNode.id; 
    db.ref('comments/' + id).remove(); 
    } 


}); 
+0

なり? 'target'の代わりに' e.currentTarget'を試してみてください。 –

+0

'reviewNode.id'のように見えないので' comments/'を削除するので、' reviewNode'はどうやって取得できますか? – Sheng

+0

var reviewNode = document.getElementById(data.key); – dj2017

答えて

0

これが起こっている:

注:

これは全体のセクションです。そしてそれはpanelクラスだけを持っています。

それはjQueryを使っていることを解決するために非常に簡単です:

if (e.target.classList.contains('delete')) { 
    var id = reviewNode.id; 
    db.ref('comments/' + id).remove(); 
} 

はどのようにボタンにイベントハンドラをアタッチしている

$(".delete").on("click", function(){ 
    var id = reviewNode.id; 
    db.ref('comments/' + id).remove(); 
}) 
+0

jQueryをインストールしましたか? – DrunkDevKek

+0

ああ、私はそれを書いたと思った。私の答えを編集しました。それは今働きますか? – DrunkDevKek

+0

申し訳ありませんが、どちらも機能していません。すべてのレコードを削除します – dj2017

関連する問題