JS正在使用控制台,但在代码中不起作用

时间:2018-02-09 14:29:44

标签: javascript jquery modal-dialog liferay

我有这个按钮,用简单的形式调用模态窗口。

<aui:button-row>
        <a style="float: left" onclick="ITD.robomarket.activateKeyModalWindowFunction(
        '${activateKeyURL}', '<%=LanguageUtil.get(pageContext, "key-activating")%>', '400', '334')" class="btn btn-green"> </a>
</aui:button-row>

我想在提交后关闭此模态窗口。我已经这样做了:

function closeModal () {
    var id = 'robomarket-activate-key-modal-window'
    var dialog = Liferay.Util.Window.getById(id);
    dialog.destroy();
}

我在.jsp中调用这个函数:

<script>
    $(document).ready(function() {
        closeModal();
    });
</script>

问题是这不起作用但是当我在控制台中写这行时,模态窗口关闭了!有什么问题?

2 个答案:

答案 0 :(得分:1)

您必须从打开模式的JSP调用closeModal。 例如,A.jsp有一个在模式对话框中打开B.jsp的链接,那么你想在提交表单时关闭B.jsp

这是一个可能的实现:

A.jsp

    <portlet:renderURL var="popupUrl" windowState="<%=LiferayWindowState.POP_UP.toString()%>">
    <portlet:param name="mvcPath" value="/B.jsp"/>
    </portlet:renderURL>

<aui:button href="${popupUrl}" useDialog="true" value="Open in popup" />

并在A.jsp的底部:

<aui:script>
Liferay.provide(window, 'closePopup', function(dialogId) {
        var A = AUI();
        var dialogId = A.one('div.dialog-iframe-modal').get("id");
        var dialog = Liferay.Util.Window.getById(dialogId);
        dialog.destroy();
});
</aui:script>

然后在 B.jsp

你必须对开启者说关闭对话框,这是一个可能的实现:

<portlet:actionURL name="/submitForm" var="submitFormURL">
    <portlet:param name="action" value="submitForm" />
</portlet:actionURL>

<aui:form action="<%= submitFormURL %>" method="post" name="fm"  onSubmit='<%= "event.preventDefault(); " + renderResponse.getNamespace() + "submitForm();" %>'>
...the form

<aui:button name="submitForm" type="submit"/>

</aui:form>

位于 B.jsp 页面的底部:

<script>
    function <portlet:namespace/>submitForm(){
        AUI().use('aui-io-request', function(A) {
            var url = '<%=submitFormURL.toString()%>';
            A.io.request(
                url,
                {
                    method: 'POST',
                    form: {id: '<portlet:namespace/>fm'},
                    on: {
                        success: function() {
                            Liferay.Util.getOpener().closePopup('dialog');
                       }
                   }
               }
           );
        });
    }
</script>

希望有所帮助

此致 阿诺

答案 1 :(得分:0)

在de DOM准备就绪后,您正在调用closeModal()方法。这意味着即使在打开popUp之前你也要求关闭。

目前尚不清楚你在popUp中做了什么。如果是部分提交,例如ajax调用或类似操作,则需要在获得响应并处理返回的数据后调用closeModal。

否则,如果您要提交一份完整的提交,(一个完整的原型,导航到一个新的页面,您将经历一个全新的渲染阶段),模态窗口将在当前的渲染页面中消除其他任何东西。