現在リッチエディタを作成していて、addEventListenerをうまく使えなくて困っています。
具体的には以下のような状況です。
最初のHTMLはエディタ入力前なので、このような感じです。
HTML
1<div id='body-text' class='body-text' contenteditable=true data-placeholder='Body Contents'></div>
そしてこのエディタに入力されると、例えば以下のようになります。
HTML
1<div id='body-text' class='body-text' contenteditable=true data-placeholder='Body Contents'> 2 <p>aaa</p> 3 <p>bbb</p> 4 <div> 5 <img id='media' src='...'> 6 </div> 7 <p>ccc</p> 8</div>
上記のようにHTMLが変化することを見据えて、次のようなJavascriptでイベントを発生させようとしているのですが、mediaというものがまだ存在しないために「Uncaught TypeError: Cannot read property 'addEventListener' of null」というエラーが表示されてしまいます。
このような時はどのようにすればうまく動作させることができるのでしょうか?
javascript
1var media = document.getElementById('media') 2 media.addEventListener('mouseover', onMouseOver)//Uncaught TypeError: Cannot read property 'addEventListener' of null とういエラーが発生 3 4 function onMouseOver(e) { 5 console.log('100') 6 }
追加情報
ちなみに以下のようなコードでcontenteditableなタグ内に画像やSNSの埋め込みコードを入れています。
javascript
1addInstagram(e) {//画面にADDボタンがあり、ADDボタンをクリックで発火 2 var embedCode = this.instagram.value 3 4 var instagram = document.createElement('div') 5 instagram.setAttribute('id', 'media') 6 instagram.setAttribute('class', 'media-frame') 7 8 instagram.innerHTML = embedCode 9 10 var target = document.getElementById('body-text') 11 target.appendChild(instagram) 12 13 var newLine = document.createElement('p') 14 target.insertBefore(newLine, instagram.nextSibling) 15 newLine.focus() 16 17 this.instagram.value = '' 18}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/10/06 13:56
2016/10/06 14:02
退会済みユーザー
2016/10/06 14:07
退会済みユーザー
2016/10/06 14:12
2016/10/06 14:41
退会済みユーザー
2016/10/06 15:28
退会済みユーザー
2016/10/06 16:12
2016/10/07 01:21
退会済みユーザー
2016/10/07 08:25
2016/10/07 09:13
退会済みユーザー
2016/10/07 10:45