Reputation: 339
I have a button when clicked, updates the backend document then opens a new windows to another website passing in some information.
It works just fine in Mozilla v27 however, testing it in IE 10 or 11 and Chrome, it doesn't work. UGH. Can anyone suggest a better way to handle this so it works in all browsers. . . Updated: All Code.
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex"
xmlns:xc="http://www.ibm.com/xsp/custom">
<xp:this.resources>
<xp:script src="js/jquery-1.8.2.min.js" clientSide="true" />
<xp:script src="js/jquery-ui-1.9.min.js" clientSide="true" />
</xp:this.resources>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[
function linkToEstatementsSignup()
{
var url = " https://ebppdemo.documentdna.com/lieberman/login.aspx?uid=#{javascript:userOccupantProfile.gettenant_id()}" +
"&fn=#{javascript:userOccupantProfile.getFirstName()}" +
"&ln=#{javascript:userOccupantProfile.getLastName()}" +
"&em=#{javascript:userOccupantProfile.getEmail()}" +
"&ph=#{javascript:userOccupantProfile.getDayPhone()}" +
"&acct=#{javascript:userOccupantProfile.getAccountNumber()}";
alert( url );
window.open( url );
}
]]>
</xp:this.value>
</xp:scriptBlock>
<xe:navigator id="navigator1">
<xe:this.treeNodes>
<xe:basicContainerNode label="Register for e-Statements"
submitValue="RegisterForEstatements" enabled="true">
<xe:this.rendered><![CDATA[#{javascript:myEStatements.renderStatements()}]]>
</xe:this.rendered>
</xe:basicContainerNode>
</xe:this.treeNodes>
<xp:eventHandler event="onItemClick" submit="true"
refreshMode="partial" refreshId="navigator1">
<xp:this.action><![CDATA[#{javascript:
if( context.getSubmittedValue() == "RegisterForEstatements" )
{
sessionScope.put( "dialogAcceptEStatementTitle", "Accept e-Statements!" );
var dialogAcceptEstatements = getComponent( "dlgAcceptEStatements" );
dialogAcceptEstatements.show();
return "";
}
sessionScope.put( "dialogOopsTitle", "Oopps!" );
sessionScope.put( "dialogOopsMessage", "\nThis Feature Has Not Been Enabled Yet!" );
var dialogOops = getComponent( "dialogOops" );
dialogOops.show();
return "";
}]]>
</xp:this.action>
</xp:eventHandler>
</xe:navigator>
</xp:view>
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.resources>
<xp:script src="js/jquery-1.8.2.min.js" clientSide="true" />
<xp:script src="js/jquery-ui-1.9.min.js" clientSide="true" />
<xp:script src="js/jquery.panelgallery-2.0.0.min.js"
clientSide="true" />
<xp:styleSheet href="/eStarTheme.css" />
<xp:script src="/jsDominoGlobals.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:this.data>
<xp:dominoDocument var="selectedOccupant"
databaseName="star/lms.nsf" formName="fOccupant" action="editDocument">
<xp:this.documentId><![CDATA[#{javascript:return sessionScope.get("OccupantUNID");}]]></xp:this.documentId>
</xp:dominoDocument>
</xp:this.data>
<xe:dialog id="dlgAcceptEStatements"
title="#{javascript:sessionScope.dialogAcceptEStatementTitle;}">
<xp:panel>
<xp:table>
<xp:tr>
<xp:td>
<xp:label value="Electronic Acceptance" id="acceptEStatementsTitle_Label1"
for="acceptEStatementsTitle1">
</xp:label>
</xp:td>
<xp:td>
<xp:div styleClass="lotusMessage lotusInfo" role="alert">
<xp:inputTextarea id="acceptedMessage" readonly="true"
style="width:auto">
<xp:this.value><![CDATA[#{javascript:myEStatements.getEStatementAcceptMessage()}]]></xp:this.value>
</xp:inputTextarea>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:label value="Check if you accept the verbiage above"
id="acceptEStatementsURL_Label1" for="acceptEStatementsAccept1">
</xp:label>
</xp:td>
<xp:td>
<xp:checkBox text="" id="acceptEStatementsChecked"
value="#{selectedOccupant.EStatementsAccepted}"></xp:checkBox>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
</xp:td>
<xp:td>
<xp:button value="Save" id="btnSave">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:
selectedOccupant.replaceItemValue( "EStatementsAccepted", getComponent( "acceptEStatementsChecked" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptMessage", getComponent( "acceptedMessage" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptedDate", new Date() );
selectedOccupant.save();
getComponent( "dlgAcceptEStatements" ).hide();
}]]></xp:this.action>
<xp:this.onComplete>
<![CDATA[linkToEstatementsSignup();]]>
</xp:this.onComplete>
</xp:eventHandler>
</xp:button>
<xp:button value="Cancel" id="btnCancel">
<xp:eventHandler event="onclick"
submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:getComponent( "dlgAcceptEStatements" ).hide();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
</xe:dialog>
</xp:view>
Upvotes: 0
Views: 435
Reputation: 21709
Try starting the clientside code in the onComplete event:
<xp:button id="button29" value="button29">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="dlgAcceptEStatements">
<xp:this.action><![CDATA[#{javascript:
selectedOccupant.replaceItemValue( "EStatementsAccepted", getComponent("acceptEStatementsChecked" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptMessage", getComponent( "acceptedMessage" ).getValue() );
selectedOccupant.replaceItemValue( "EStatementsAcceptedDate", new Date() );
selectedOccupant.save();
getComponent( "dlgAcceptEStatements" ).hide();
}]]></xp:this.action>
<xp:this.onComplete>
<![CDATA[linkToEstatementsSignup();]]>
</xp:this.onComplete>
</xp:eventHandler>
</xp:button
Bonus: if acceptEStatementsChecked and acceptedMessage are fields in your datasource, then consider using the datasource getValue() method instead of the component getValue() method (e.g. document1.getValue("acceptEStatementsChecked")
instead of getComponent("acceptEStatementsChecked" ).getValue()
).
Upvotes: 1