Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: HH am 20.10.16 - 14:43:26

Titel: xpage mit bootbox
Beitrag von: HH am 20.10.16 - 14:43:26
Hallo,

vor dem löschen eines Dokuments in einer xpage, möchte ich per js die Zustimmung des Anwenders einholen. Weil's hübsch aussieht, möchte ich statt JavaScript confirm() bootbox.confirm verwenden.

Leider rauscht das Script einfach so durch und wartet nicht auf die Eingabe des Anwenders. Hat jemand eine Idee, wie man das verhindern kann?

Meine Funktion zum öffnen des bootbox dialogs:

Code
function bootboxConfirm( dlgTitle, prompt ) {
	var resultVal ;
    bootbox.confirm(
    	{
        title: dlgTitle,
        message: prompt ,
        buttons: {
            cancel: {
				label: "abbrechen",
				className: "btn-default",
		        callback: function (result) {
		            console.log('This was logged in the callback: ' + result);
		            resultVal = result ;
		        }
            },
            confirm: {
				label: "ok",
				className: "btn-default",
		        callback: function (result) {
		            console.log('This was logged in the callback: ' + result);
		            resultVal = result ;
		        }
            }
        },
        callback: function() {
        	resultVal = resultVal ;
        }
    });
    
    console.log( "resultVal = " + resultVal ) ;
    return resultVal ;
}

Meine Schaltfläche zum löschen:

Code
				<xp:button value="remove" id="button3">
					<xp:eventHandler event="onclick" submit="true"
						refreshMode="partial" refreshId="dataTablePeople">
						<xp:this.action><![CDATA[#{javascript:PeopleBean.setPerson( person ) ;
PeopleBean.removePerson() ;}]]></xp:this.action>
						<xp:this.script><![CDATA[return bootboxConfirm( "Dokument löschen", "Soll die Person und alle zugehörigen Dokumente gelöscht werden?" ) ;]]></xp:this.script>
					</xp:eventHandler>
				</xp:button>


Danke,
Hubert
Titel: Re: xpage mit bootbox
Beitrag von: umi am 24.10.16 - 14:07:47
Moin
Das Problem dürfte das submit="true" sein.
Eine Lösungsmöglichkeit wären 2 Buttons. Button1 Sichtbar nur mit dem Client Code (Confirm) und Button 2 versteckt welcher dann bei erfolg vom 1. Button "geklickt" wird...
Titel: Re: xpage mit bootbox
Beitrag von: HH am 24.10.16 - 15:20:16
Hallo Urs,

das war es zwar nicht so ganz, hat mich aber auf die folgende, funktionierende Lösung gebracht:

Code
	<xp:scriptBlock id="scriptBlock1">
		<xp:this.value><![CDATA[
function bootboxConfirm( dlgTitle, prompt ) {
	var resultVal = null ;
    bootbox.confirm(
    	{
        title: dlgTitle,
        message: prompt ,
        buttons: {
            cancel: {
				label: "abbrechen",
				className: "btn-default"
            },
            confirm: {
				label: "ok",
				className: "btn-default"
            }
        },
        callback: function(result) {
        	if( result == true ) {
        		document.getElementById("#{id:hiddenRemoveBtn}").click() ;
        	}
        }
    });
}
		]]></xp:this.value>
	</xp:scriptBlock>


	<xp:div id="dataTablePeople">

		<xp:button value="remove" id="removeBtn">
			<xp:eventHandler event="onclick" submit="false">
				<xp:this.script><![CDATA[
bootboxConfirm( "Dokument löschen", "Soll ... gelöscht werden?" ) ;
				]]></xp:this.script>
			</xp:eventHandler>
		</xp:button>


		<xp:button value="hidden remove" id="hiddenRemoveBtn" style="display:none;">
			<xp:eventHandler event="onclick" submit="true"
				refreshMode="complete">
				<xp:this.action>
					<xp:openPage name="/gridPeople.xsp"></xp:openPage>
				</xp:this.action>
			</xp:eventHandler>
		</xp:button>

	</xp:div>