環境
os : Windows 7
バグ内容
以下のコードでctrl + s
を押したら2つ目
と表示されてほしいのに両方のアラートが連続して表示されてしまう。
shortcut.add('ctrl+s', function(){
alert('1つ目');
});
shortcut.remove('ctrl+s');
shortcut.add('ctrl+s', function(){
alert('2つ目');
});
修正方法
shortcut.js
上記リンクがコード全体ですが219行目と220行目を入れ替えれば直ります。
shortcut.remove
- if(ele.detachEvent) ele.detachEvent('on'+type, callback);
- else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
+ if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
+ else if(ele.detachEvent) ele.detachEvent('on'+type, callback);
else ele['on'+type] = false;
}
}
バグの理由
shortcut.add
ではaddEventListener
のチェックを先に行っているのにshortcut.remove
ではそdetachEvent
のチェックを先に行っていて対応したadd
とremove
になっていないため。
// shortcut.add
if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
else ele['on'+opt['type']] = func;
// shortcut.remove
if(ele.detachEvent) ele.detachEvent('on'+type, callback);
else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
else ele['on'+type] = false;
気づいた経緯
【HTA】【jquery】【Marked】Markdown版ローカルwiki(v1.6)
MarkdownLocalWiki
上記をフォークしてwiki編集モードでのみctrl + s
で保存できる機能を追加していました。
編集モード移行時にshortcut.add
、それ以外に移行したらshortcut.remove
として制限を掛けていたのですが2回以上保存されることがありバグに気づきました。
その他
このことを本家に伝えたいのですが英語力が皆無なためQiitaに投稿しました。