0
ユーザーが写真を選択したときにプレーンJavaScriptの親divにdivを追加します。プレビューを開いたり、写真を削除したりするための2つのクリックイベントも追加しています。最初の写真を追加すると、両方のイベントは正常に動作しますが、別の写真を追加すると、最新の写真にクリックイベントが表示されますが、前のdivは表示されません。新しいDivsを動的に追加したときにイベントリスナーが削除されます
どうしてこれが起こっているのですか、もっと重要なのはどうしたらいいですか?
問題のコードは以下のとおりです。
function addImageToView(imageURI){
var imageDiv = document.getElementById('imageMaster');
imageDiv.innerHTML += '<div style="padding-bottom: 10px;"><div style="float: left;" class="thumbnail" id= img_'+ imageCounter +'><img id= img_'+ imageCounter +' src="' + imageURI + '"></div><div id= img_'+ imageCounter +'_delete>delete</div><div style="width:67%; padding-top: 30px; padding-left: 10px;" class="thumbnail"><label class="item item-input" id="article-input8"><input type="text" placeholder="Photo Caption" ng-model="data.report_title"></label></div></div>';
document.getElementById('img_'+ $scope.imageCounter).addEventListener("click", function(){showMe(imageURI)});
document.getElementById('img_'+ $scope.imageCounter + '_delete').addEventListener("click", function(){removePhoto(this, imageURI)});
}
'imageDiv.innerHTML + = ...'は 'imageDiv'に要素を追加せず、既存の要素をすべて新しい要素に置き換え、以前に設定したイベントリスナーはなくなりました。 HTML文字列を追加して既存の要素に要素を追加するには、[insertAdjacentHTML](https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML)を使用する必要があります。 – Teemu
優れています。大変ありがとう@Teemu。私はその方法が存在するのか知らなかった。あなたがあなたのコメントを答えに変えたら、私は喜んでそれを受け入れるでしょう:) –