为了账号安全,请及时绑定邮箱和手机立即绑定

js给动态生成的元素绑定事件

js给动态生成的元素绑定事件

MMTTMM 2019-03-22 19:15:07
for (let i=0;i<10;i++){       const html = `<webview src="http://www.github.com">i</webview>`;       $('.container').append(html)    }    const webview = document.querySelectorAll('webview')    webview[0].addEventListener('console-message', e => {        console.log(e.message);        if(e.message.indexOf('这次我回答了')!==-1){            alert('这才是我要的数据')        }    });需要在一个页面遍历一个或者多个webview标签,这个标签有个事件叫console-message,不定时会返回一些字符串,所以我要实时监听这个事件,假如事先我知道webview标签的数量这个就不是问题,但是这个标签可能是N个,那我就要建立N个addEventListener的监听事件,完全没有思路,请教大神给个思路,谢谢
查看完整描述

4 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

事件委托 搜索关键字


查看完整回答
反对 回复 2019-04-01
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

事件是冒泡的话,只需要把事件绑定在 它们的父元素 .container 上,通过 ev.target 来检查是哪个 webview 对象触发的即可


查看完整回答
反对 回复 2019-04-01
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

首先console-message事件不同于click,mouseover事件,它不能冒泡,它也不能手动触发,它只是个主动返回字符串的事件,在这我只是用了一种很不规范的解决办法,就是直接for循环遍历js方法


const webview = document.querySelectorAll('webview')


    for(let i=0;i<webview.length;i++){

        webview[i].addEventListener('console-message', e => {

            console.log(e.message);

            if(e.message.indexOf('这次我回答了')!==-1){

                alert('这才是我要的数据')

            }

        });

    }

虽然知道这样很不规范,但是目前没有更好的方法


查看完整回答
反对 回复 2019-04-01
  • 4 回答
  • 0 关注
  • 627 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信