我剛剛開始使用 Dynamic Yield 進行 A/B 測驗。我在覆寫由 Javascript 觸發的事件時遇到了一些問題。
為了這個例子,讓我們在前端撰寫這個函式:
$('body')
.on('mouseenter focusin', 'class1', () => {
$('body').trigger('menu:close');
});
現在我的問題是,如何在整個檔案已經初始化后覆寫這個事件?如您所知,這種 A/B 測驗必須覆寫頁面上加載的代碼。例如,我想洗掉這個觸發事件。有人對如何進行有任何想法嗎?我應該只撰寫純 Javascript,因為在這個階段我無法訪問 Jquery。
謝謝
uj5u.com熱心網友回復:
使用.off()方法:
$('body').off('mouseenter focusin', 'class1');
請注意,這將洗掉委托給此類的這些事件的所有處理程式,而不僅僅是原始代碼添加的處理程式。如果你想更有選擇性,你需要使用命名函式而不是匿名函式,這樣你以后可以提供相同的函式。
function handler() {
$('body').trigger('menu:close');
}
$('body').on('mouseenter focusin', 'class1', handler);
// later
$('body').off('mouseenter focusin', 'class1', handler);
另一種解決方案是使用命名空間事件。
$('body').on('mouseenter.test focusin.test', 'class1', () => $('body').trigger('menu:close'););
// later
$('body').off('mouseenter.test focusin.test', 'class1');
uj5u.com熱心網友回復:
您可以通過洗掉 Jquery 附加到物件的屬性來洗掉事件:

在我的情況下,它被稱為jQuery360075100310324570631. 在下面的代碼中,按鈕的事件被洗掉
$("body").on("click", ".class1", () => {
console.log("click!!");
});
function deleteEvent() {
const a = document.getElementsByTagName("body")[0];
const regex = new RegExp(/jQuery\d*/);
for (const key in a) {
if (regex.test(key)) {
delete a[key];
return;
}
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="class1">button</button>
<button class="class2" onclick="deleteEvent()">remove event from button</button>
uj5u.com熱心網友回復:
$('body').off('mouseenter focusin', 'class1');
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/475833.html
標籤:javascript jQuery
上一篇:ReactuseEffect只取物件陣列中的最后一個元素
下一篇:如何從圓圈中的文本中洗掉陰影?
