【发布时间】:2017-12-25 04:01:54
【问题描述】:
我正在制作一个弹出系统,但在我的自定义函数中使用 event 作为属性时遇到了一些问题。这是我的代码:
var openLayoutPopup = function(event){
event.preventDefault();
var target = $(event.target);
var flexible_field = target.closest('.acf-field-flexible-content').attr('data-key');
var popup = $('.'+flexible_field);
var overlay = $('.bbh-popup-overlay');
popup.addClass('open').fadeIn();
overlay.fadeIn();
}
$('.my-class').click(openLayoutPopup(event));
但是我的控制台给了我以下错误,说事件未定义:
ReferenceError: 事件未定义
我之前使用过event.target 和event.which,但仅用于未命名的函数。
另外,我还有另一个类似的函数,我需要在其中传递event 和一个辅助布尔参数:
function closeLayoutPopup(event, openLayout){
event.preventDefault();
var popup = $(event.target).closest('.bbh-popup');
var overlay = $('.bbh-popup-overlay');
popup.removeClass('open').fadeOut();
overlay.fadeOut();
if(open == true){
var dataLayout = target.attr('data-layout');
acf.fields.flexible_content.add(dataLayout);
}
}
同样,我对如何传递参数感到困惑。
编辑:
我试图做的很快解释是让一个按钮打开一个弹出窗口。弹出窗口有两个按钮,一个用于关闭弹出窗口,一个用于将布局添加到页面并随后关闭。问题是我错误地调用了函数,而没有意识到我的解决方案不合逻辑。
感谢@Raibaz,我修复了点击事件。然后我将closeLayoutPopup 添加到addLayout 函数中,而不是合并它们:
/*==============================================
= Function - Close popup =
==============================================*/
function closeLayoutPopup(event){
event.preventDefault();
var popup = $(event.target).closest('.bbh-popup');
var overlay = $('.bbh-popup-overlay');
popup.removeClass('open').fadeOut();
overlay.fadeOut();
}
/*=============================================
= Function - Open popup =
=============================================*/
var openLayoutPopup = function(event){
event.preventDefault();
var target = $(event.target);
var flexible_field = target.closest('.acf-field-flexible-content').attr('data-key');
var popup = $('.'+flexible_field);
var overlay = $('.bbh-popup-overlay');
popup.addClass('open').fadeIn();
overlay.fadeIn();
}
/*=============================================
= Function - Add Layout =
=============================================*/
var addLayout = function(event){
event.preventDefault();
var target = $(event.target);
var dataLayout = target.attr('data-layout');
acf.fields.flexible_content.add(dataLayout);
closeLayoutPopup();
}
/*---------- add section click - open popup ----------*/
$('.acf-field-flexible-content .acf-flexible-content > .acf-actions a.acf-button').on('click',openLayoutPopup);
/*---------- Close button click ----------*/
$('.layout-picker-close').on('click', closeLayoutPopup);
/*---------- Add layout ----------*/
$('.bbh-popup a.add-layout-button').on('click', addLayout);
【问题讨论】:
-
这是什么? $('.my-class(openLayoutPopup(event)); 错字???我不确定你的意图是什么。
-
@Kosch 是的,那是当年的错字。我正在删除一个非常长的选择器,并且对退格按钮感到有点高兴。现在已经恢复正常了。 @t.niese 如果我将
event作为'.my-class'的点击事件的参数传递,我会收到该行的错误。如果我没有传递任何东西,我会在函数event.preventdefault()的第一行得到错误
标签: javascript jquery function parameter-passing