簡體   English   中英

如何使prepOverlay與createObject一起使用?

[英]How to make prepOverlay works with createObject?

在模板中,我想在彈出窗口中打開一個添加表單。

所以,我有一個鏈接:

<p class="visualClear">
    <a href="createObject?type_name=Contact" class="link-overlay" i18n:translate="">Add a contact</a>
</p>

和一個制作prepOverlay的javascript:

(function($) {
jQuery(function($){
    // popin de plone
    $('a.link-overlay').prepOverlay({
        subtype: 'ajax',
        filter: common_content_filter,
        formselector: 'form[name=edit_form]',
        noform: 'reload',
        closeselector: '[name="form.button.cancel"]'
    }); 
});
})(jQuery);

問題是,當我點擊鏈接時,我遇到了一個javascript錯誤: TypeError: $(...).multiSelect is not a function ,彈出窗體根本沒有顯示。

這個錯誤是根據這篇文章https://github.com/ehynds/jquery-ui-multiselect-widget/issues/267得出的,因為jquery被加載了兩次。

這可能是原因,因為當我點擊鏈接時,我在http://localhost:8080/Plone/guide-paroissial/milieux-sociaux/acf-action-catholique-des-femmes/createObject?type_name=Contact&ajax_load=1398763930910上獲得了GET http://localhost:8080/Plone/guide-paroissial/milieux-sociaux/acf-action-catholique-des-femmes/createObject?type_name=Contact&ajax_load=1398763930910

然后重定向到: http://localhost:8080/Plone/guide-paroissial/milieux-sociaux/acf-action-catholique-des-femmes/portal_factory/Contact/contact.2014-04-29.9309424841/edit

那么,我怎么能讓這個工作?

好吧,我在一個vanilla plone網站上測試了你的代碼。 我剛剛更改了prepoverlay的選擇器以匹配“添加菜單”並刪除了第二個jquery范圍定義。

jQuery(function($){
    // popin de plone
    $('.actionMenuContent a').prepOverlay({
        subtype: 'ajax',
        filter: common_content_filter,
        formselector: 'form[name=edit_form]',
        noform: 'reload',
        closeselector: '[name="form.button.cancel"]'
    });
});

工作沒有任何問題。

否則我也會得到一個TypeError

問題是keywordmultiselect.js未加載到模板中。

要加載它:

$.ajax({
    url: 'widgets/js/keywordmultiselect.js',
    dataType: "script"
});

完整代碼:

jQuery(function($){
    // popin de plone
    $(document).ready(function(){
        $.ajax({
            url: 'widgets/js/keywordmultiselect.js',
            dataType: "script"
        });
        $('a.link-overlay').prepOverlay({
            subtype: 'ajax',
            filter: common_content_filter,
            formselector: 'form[name=edit_form]',
            noform: function(el) {
                if ($.plonepopups.noformerrorshow(el, 'close') === 'close'){
                    $('input[name="form.button.Submit"]').click();
                    return 'close';
                }
            },
            closeselector: '[name="form.button.cancel"]'
        });
    });
});

感謝@Mathias和@SteveM指點我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM