代码之家  ›  专栏  ›  技术社区  ›  Al.Boldyrev

JS在控制台中工作,但在代码中不工作

  •  0
  • Al.Boldyrev  · 技术社区  · 7 年前

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

    <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 回复  |  直到 7 年前
        1
  •  1
  •   Arnaud Charpentier    7 年前

    您必须从打开模式的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>
    

    希望有帮助

    当做 阿尔诺

        2
  •  0
  •   aritzg    7 年前

    您正在de DOM准备就绪后调用closeModal()方法。这意味着您甚至在弹出窗口打开之前就要求关闭。

    不清楚您在弹出窗口中做了什么。如果是部分提交,比如ajax调用或类似的调用,则需要在收到响应并处理返回的数据后调用closeModal。

    否则,如果您提交完全提交(完全重新加载,导航到新页面,您将经历一个全新的呈现阶段),模式窗口将与当前呈现页面中的所有其他内容不相似。