如何使prepOverlay与createObject一起使用?

时间:2014-04-29 09:42:37

标签: jquery popup plone jquery-tools

在模板中,我想在弹出窗口中打开一个添加表单。

所以,我有一个链接:

<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/portal_factory/Contact/contact.2014-04-29.9309424841/edit

那么,我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

我在vanilla plone网站上测试了你的代码。我刚刚更改了prepoverlay的选择器以匹配&#34;添加菜单&#34;并删除了第二个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

答案 1 :(得分:1)

问题是模板中未加载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指点我。