亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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條經驗 獲得超8個贊

你的做法是正確的,但是如果把?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 關注
  • 528 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號