JS 在控制台中工作但在代码中不起作用
JS is working in console but doesn't work in code
我有这个按钮,它以简单的形式调用模态 window。
<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>
我想在提交后关闭此模式 window。我已经这样做了:
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>
问题是这行不通,但是当我在控制台中写入这些行时,模态 window 关闭了!有什么问题?
您正在 DOM 就绪后调用 closeModal () 方法。这意味着您甚至在弹出窗口打开之前就要求关闭。
不清楚您在弹出窗口中做了什么。如果是部分提交,比如说 ajax 调用或类似的,您需要在收到响应并处理返回的数据后调用 closeModal。
否则,如果您要提交完整的提交(完整的重新加载,导航到新页面,您将经历一个全新的呈现阶段),模态 window 将与其他内容一起消失当前呈现页面。
您必须从打开模式的 JSP 调用 closeModal。
例如 A.jsp 有一个 link 在模态对话框中打开 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>
希望对您有所帮助
问候
阿诺
我有这个按钮,它以简单的形式调用模态 window。
<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>
我想在提交后关闭此模式 window。我已经这样做了:
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>
问题是这行不通,但是当我在控制台中写入这些行时,模态 window 关闭了!有什么问题?
您正在 DOM 就绪后调用 closeModal () 方法。这意味着您甚至在弹出窗口打开之前就要求关闭。
不清楚您在弹出窗口中做了什么。如果是部分提交,比如说 ajax 调用或类似的,您需要在收到响应并处理返回的数据后调用 closeModal。
否则,如果您要提交完整的提交(完整的重新加载,导航到新页面,您将经历一个全新的呈现阶段),模态 window 将与其他内容一起消失当前呈现页面。
您必须从打开模式的 JSP 调用 closeModal。 例如 A.jsp 有一个 link 在模态对话框中打开 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>
希望对您有所帮助
问候 阿诺