2017-07-19 12 views
2

我正在創建一個彈出式系統,並且在使用event作爲我的自定義函數中的屬性時遇到了一些問題。這裏是我的代碼:在jQuery自定義函數中使用事件

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 is not defined

我用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的點擊事件。然後我加入到closeLayoutPopupaddLayout功能,而不是將它們組合起來:

/*============================================== 
=   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); 
+1

這是什麼? $('。my-class(openLayoutPopup(event)); typo ???我不確定你想要什麼 – Kosch

+0

@Kosch是的,這是一年中的錯字,我刪除了一個非常長的選擇器,有點觸發了backspace按鈕,現在已經恢復正常了 @ t.niese如果我在''.my-class''的click事件上通過'event'作爲參數,那麼我得到該行的錯誤。如果我沒有通過任何事情,我會在函數'event.preventdefault()' –

回答

5

我假設你想打開點擊與my-class類元素時,讓你的代碼應該是這樣的佈局彈出:

$('.my-class').on('click', openLayoutPopup); 

當調用openLayoutPopup回調函數時,事件參數將被傳遞給函數。

您可以查看jQuery.on的文檔以供參考。

至於其他功能,而不是傳遞第二個布爾參數,你可以使用自定義的CSS類或數據屬性表明,有一個開放的彈出窗口中的單擊事件處理程序,讓您的openLayoutPopup功能可以包含像這樣的:

$('body').addClass('has-popup') 

,並在您closeLayoutPopup你可以只檢查類存在,以確定是否有打開的彈出窗口,並最終關閉彈出窗口時將其刪除。

+1

的第一行中得到錯誤,我覺得我嘗試了你的第一個例子,但顯然我搞砸了。可能是因爲on('點擊「,myFunction(event))」,但它完美地工作,謝謝! 關於另一個選項,我意識到我完全不需要第二個參數,因爲我可以通過執行其他所有功能的函數來運行closePopup函數,這正是我試圖區分的。用動作或無動作關閉彈出窗口。 –