JavaScript 事件处理代码被多次调用
JavaScript event handling code get's called multiple times
我需要你的帮助。我目前正在 JavaScript 中使用模态库来为我的客户显示模态:
https://github.com/vodkabears/Remodal/tree/1.1.1
不幸的是,我的事件处理在用户单击按钮时无法按预期工作。当您查看手册时,您可以在点 Events 下看到以下事件处理程序:
$(document).on('cancellation', '.remodal', function () {
console.log('Cancel button is clicked');
});
例如,当按下取消按钮时会触发此事件。因为我对多个事物使用一个弹出窗口,所以我需要将事件处理程序直接附加到调用。所以首先我写了一个打开弹出窗口的函数:
function openRemodal( remodalId ) {
let remodal = $( `[data-remodal-id=${remodalId}]` );
remodal.remodal().open();
return remodal; // <- added to handle events
}
我可以这样调用这个函数:
openRemodal( 'information-remodal' );
为了完成事件处理,我现在在函数中返回了重模态并重写了我的调用:
openRemodal( 'information-remodal' ).on( 'cancellation', function () {
alert( 'Test' );
} );
这似乎可行,但不知何故,当我重复打开弹出窗口并按下按钮时,任何新的打开都会增加多次显示警报。
我不确定为什么会发生这种情况以及原因。你能帮我解决这个问题吗?我只想调用其中的任何函数一次 - 任何时候。
JQuery 有一个 .one
方法...尝试用它代替 .on
。回调应该 运行 只有一次。 https://api.jquery.com/one/
每次打开模型时都会将函数附加到取消事件。所以添加新功能,你永远不会删除它。第一次你有一个,然后你有两个...等等
只需附加一次,或在处理事件后将其移除。
const modal = openRemodal( 'information-remodal' )
const handler = () => {
alert( 'Test' );
modal.off('cancellation', handler);
}
modal.on( 'cancellation', handler);
我需要你的帮助。我目前正在 JavaScript 中使用模态库来为我的客户显示模态:
https://github.com/vodkabears/Remodal/tree/1.1.1
不幸的是,我的事件处理在用户单击按钮时无法按预期工作。当您查看手册时,您可以在点 Events 下看到以下事件处理程序:
$(document).on('cancellation', '.remodal', function () {
console.log('Cancel button is clicked');
});
例如,当按下取消按钮时会触发此事件。因为我对多个事物使用一个弹出窗口,所以我需要将事件处理程序直接附加到调用。所以首先我写了一个打开弹出窗口的函数:
function openRemodal( remodalId ) {
let remodal = $( `[data-remodal-id=${remodalId}]` );
remodal.remodal().open();
return remodal; // <- added to handle events
}
我可以这样调用这个函数:
openRemodal( 'information-remodal' );
为了完成事件处理,我现在在函数中返回了重模态并重写了我的调用:
openRemodal( 'information-remodal' ).on( 'cancellation', function () {
alert( 'Test' );
} );
这似乎可行,但不知何故,当我重复打开弹出窗口并按下按钮时,任何新的打开都会增加多次显示警报。
我不确定为什么会发生这种情况以及原因。你能帮我解决这个问题吗?我只想调用其中的任何函数一次 - 任何时候。
JQuery 有一个 .one
方法...尝试用它代替 .on
。回调应该 运行 只有一次。 https://api.jquery.com/one/
每次打开模型时都会将函数附加到取消事件。所以添加新功能,你永远不会删除它。第一次你有一个,然后你有两个...等等
只需附加一次,或在处理事件后将其移除。
const modal = openRemodal( 'information-remodal' )
const handler = () => {
alert( 'Test' );
modal.off('cancellation', handler);
}
modal.on( 'cancellation', handler);