将 onclick 事件侦听器添加到并发事件

Adding onclick event listener to a concurrent event

我想创建一个简单的弹出例程,使用 overlay class 使背景变暗,并使用 popup class 显示弹出窗口。我将此功能设为切换功能。这里的技巧是我想将此功能附加到 overlay div 以便如果用户单击黑暗变暗的背景,它将自动关闭弹出窗口(等于取消对话框)。

function popup (popupclass = ".popup", overlayclass = ".overlay") {
    if (!$(overlayclass).is(':visible')) {
        $(overlayclass).fadeTo('slow', 0.7);
        $(popupclass).fadeTo('slow', 0.7);
        $(popupclass).center();
        $(overlayclass).click(popup(popupclass, overlayclass));
    }
    else {
        $(overlayclass).fadeOut('slow');
        $(popupclass).fadeOut('slow');
    }
}

但是第一次调用这个函数时,背景变暗,弹窗出现,但马上又淡出。怎么了?

在这种情况下

$(overlayclass).click(popup(popupclass, overlayclass));

当功能参数作为点击事件的参数传递时,它会立即执行并调用

所以这样调用函数

$(overlayclass).click( function() { 
 popup(popupclass, overlayclass) 
});