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

JavaScript 如何重复绑定问题?

JavaScript 如何重复绑定问题?

蓝山帝景 2018-09-08 14:13:22
var audio = new Audio(); audio.onended = function(e){    console.log('end 1'); } audio.onended = function(e){    console.log('end 2'); }上面代码很只会输出end 2,要怎么才能做到能输出end 1 和 end 2?我自己想了一种方法bind(handler, cb){     !m && (m = []);     !m[handler] && (m[handler] = []);     m[handler].push(cb); }      bind('ended', function(e){    console.log('1'); }); bind('ended', function(e){    console.log('2'); });var audio = new Audio(); audio.onended = (e) => {    for (var k in m['ended']){         m['ended'][k](e);     } }大概就是这样,用数组保存,然后audio方法循环调用但是我就感觉实现的方式不够优希望各位不吝赐教
查看完整描述

1 回答

?
qq_遁去的一_1

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

你的做法是正确的,但是如果把 bind 封装起来,再把下面的 for 封装成一个 trigger 函数就更好了。

不过话说回来,Audio 是一个 HTMLDom 对象,本身应该提供了 addEventListener() 方法,可以用这个方法添加任意个处理函数。

如果你使用 jQuery,通过 jQuery 封装之后调用 on() 也可以绑定多个处理函数,比如


$(audio)
    .on("ended", function() {        console.log(1);
    })
    .on("ended", function() {        console.log(2);
    });


查看完整回答
反对 回复 2018-10-26
  • 1 回答
  • 0 关注
  • 514 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号