techfoobarの回答に基づいて、イベント関連の問題をデバッグするのに非常に便利な最新の高度なバージョンです。 Webpack/Babelのような現代的なenv JSを使用することが期待されていますが、古いJS構文でも同じ作業を行うことができます。
ログメッセージがユーザーにとって使いやすいという点を除いて基本的には同じです。部#のナビゲーション・バー> a.Tappable-inactive.group-link.navバー項目に()
click.stopPropagation:私はあなたが問題のデバッグに役立つ「意味のあるセレクター」を計算してみてください.MY-メインチーム> div.navバー・アイテム・コンテンツ> SVG
// Logs all calls to preventDefault/stopPropagation in an user-friendly way
if (process.env.NODE_ENV !== "production") {
(function monkeyPatchEventMethods() {
const logEventMethodCall = (event,methodName) => {
const MinimumMeaninfulSelectors = 3; // how much meaningful items we want in log message
const target = event.target;
const selector = (function computeSelector() {
const parentSelectors = [];
let node = target;
let minimumSelectors = 0;
do {
const meaningfulSelector = node.id ?
`#${node.id}` : node.classList.length > 0 ?
`.${Array.prototype.join.call(node.classList, '.')}` : undefined;
if (meaningfulSelector) minimumSelectors++;
const nodeSelector = `${node.tagName.toLowerCase()}${meaningfulSelector ? meaningfulSelector : ''}`;
parentSelectors.unshift(nodeSelector);
node = node.parentNode;
} while (node && node !== document && minimumSelectors < MinimumMeaninfulSelectors);
return parentSelectors.join(" > ");
})();
console.debug(`${event.type}.${methodName}() on ${selector}`,event);
};
const preventDefault = Event.prototype.preventDefault;
Event.prototype.preventDefault = function() {
logEventMethodCall(this,'preventDefault');
preventDefault.call(this);
};
const stopPropagation = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function() {
logEventMethodCall(this,'stopPropagation');
stopPropagation.call(this);
};
})();
}
https://gist.github.com/slorber/b1c0ffef56abd449c05476b5c609a36e
すごいもの、分で怒っている声明が見つかりました。 – Marco
すごい!........ –
素晴らしい...保存した時間 – Zain