Zur Navigation

Fallunterscheidung mit confirm()

1 lava

Danke, ich habe es jetzt mit <div visibility="hidden"> und einer Einblende-Funktion halbwegs gelöst - wenn auch noch nicht so elegant, wie ich es mit der Blase fände. Wie bekomme ich die Blasenform in veränderlicher Größe hin?

Andere, ähnliche Frage: confirm() öffnet ja ein Fenster mit einem Bestätigungsbutton. Auf http://de.wikibooks.org/wiki/Websiteentwicklung:_JavaScript:_Dialogboxen steht ein Tip, wie man daraus ein Ja/Nein-confirm() machen kann: einfach einen zweiten "Nein"-Button einführen als zweite Methode, das Fenster zu schließen, ohne daß der confirm-Parameter mit einem Wert belegt wird. Nur: wie kriege ich diesen zweiten Button elegant ins Fenster rein? Und wie kann ich auf dem ersten Button eine andere Beschriftung als "OK" geben?

Ich rufe confirm() gerade innerhalb eines Formulars mit [code] <form method=get() onsubmit="return confirmfunction()" action="folgeseite.html">[\code] auf, die confirmfunction() soll dann mittels confirm ein Ja/Nein-Fenster öffnen (wie genau?) und je nachdem, ob der boolesche Rückgabewert dann true oder false ist (also ob der erste oder zweite Button gedrückt wurde), soll es weitergehen, also bräuchte ich eigentlich auch bei der action noch eine Fallunterscheidung für folgeseite1 und folgeseite2 -> wie mache ich das?

11.07.2007 10:50 | geändert: 11.07.2007 10:57

2 Jörg Kruse

Hallo Lava,

Danke, ich habe es jetzt mit <div visibility="hidden"> und einer Einblende-Funktion halbwegs gelöst - wenn auch noch nicht so elegant, wie ich es mit der Blase fände. Wie bekomme ich die Blasenform in veränderlicher Größe hin?

wie schaut deine Einblende-Funktoon denn genau aus? Wenn du dort visibility einen anderen Wert gibst, kannst du das dann ja auch für height und width

Ich rufe confirm() gerade innerhalb eines Formulars mit [code] <form method=get() onsubmit="return confirmfunction()" action="folgeseite.html">[\code] auf, die confirmfunction() soll dann mittels confirm ein Ja/Nein-Fenster öffnen (wie genau?) und je nachdem, ob der boolesche Rückgabewert dann true oder false ist (also ob der erste oder zweite Button gedrückt wurde), soll es weitergehen, also bräuchte ich eigentlich auch bei der action noch eine Fallunterscheidung für folgeseite1 und folgeseite2 -> wie mache ich das?

Indem du zwei forms mit jeweils eigenem Submit-Button und eigener action URL verwendest?

11.07.2007 12:08 | geändert: 11.07.2007 12:09

3 lava

Zitat von Jörg

Indem du zwei forms mit jeweils eigenem Submit-Button und eigener action URL verwendest?

Nein, es soll ja nur EIN confirm-fenster aufgehen, das mir einen Ja- und einen Nein-Button anbietet. Der Ja-Button ist der Confirm-Okay-Button und der Nein-Button ein zusätzlich selbsteingefügter, wie auch erklärt auf o.g. Webseite:

http://de.wikibooks.org/wiki/Websiteentwicklung:_JavaScript:_Dialogboxen

Ich versteh nur nicht wirklich, wie die das implementiert haben... Denn return confirmfunction() macht mir ja das Fenster MIT dem confirm-button zusammen auf, der steht ja in keiner eigenen Form, die ich editieren kann - oder?

11.07.2007 12:11 | geändert: 11.07.2007 12:14

4 Jörg Kruse

Wie sieht denn die Funktion confirmfunction() aus?

Die Confirm-Buttons sind in den Methoden alert() und confirm() enthalten, deren Inhalt und Form kannst du nicht ändern, diese hängen vom Browser bzw. Betriebssystem ab.

11.07.2007 12:39 | geändert: 11.07.2007 12:40

5 lava

Na, wie die Funktion aussehen soll, ist ja gerade die Frage. Bisher sieht sie so aus:

 function confirmfunction()
{
  return confirm("Sie wollen eine bereits laufende Umfrage abändern. Wirklich fortfahren?");
}


und erlaubt nur ein "Okay". Sie soll aber künftig ein "Erst Teilnehmeranzahl zurücksetzen" oder ein "Trotzdem fortfahren" (oder notfalls auch ein unverändertes "Okay" und "Erst Teilnehmeranzahl zurücksetzen") erlauben. Ich wollte mich an dem Beispiel von o.g. Seite orientieren, demnach ist sowas ja prinzipiell möglich - nur steht da dummerweise eben nicht, wo ich den 2.Button herbekomme im Confirm-Fenster.....

11.07.2007 13:34 | geändert: 11.07.2007 13:36

6 lava

Hm, Denkfehler von mir. confirm() gibt ja bereits ein "Okay" und ein "Abbrechen". Wäre also nur die Frage, ob man die Button-Beschriftungen ändern kann. Die Funktion sieht jetzt so aus:

function confirmwork()
{
  return confirm("Sie wollen eine bereits laufende Umfrage abändern. \n Möchten Sie zunächst die Teilnehmerzahl zurücksetzen?");
}

Aber wie erhalte ich jetzt die entsprechende boolesche Variable, wenn ich
 <form method="get" action="folgeseite.html" onsubmit="return confirmwork()" >
mache? Leider wird der Folgeseite momentan kein entsprechender Query String automatisch mitgegeben.

11.07.2007 13:48 | geändert: 11.07.2007 14:02

7 Jörg Kruse

Wenn ich die die Funktion confirmfunction() aufrufe, erhalte ich wie erwartet ein Fenster mit einer Frage und den beiden Buttons "OK" und "Abbrechen". Auch das confirm()-Fenster im Beipiel von wikibooks.org enthält nur diese beiden Buttons?

Den Inhalt der Buttons wirst du wohl nicht verändern können, nur die Frage - du musst die Frage dann so formulieren, dass die Antworten "OK" und "Abbrechen" hierzu passen. Falls du das Fenster weitergehender gestalten möchtest, musst du eine eigene Funktion erstellen, die ein Popup mit Formular aufruft. Das ist dann etwas aufwendiger als die Verwendung von confirm() - dafür hast du dann aber mehr Gestaltungsmöglichkeiten

11.07.2007 14:16 | geändert: 11.07.2007 14:17

8 lava

Hm, da haben wir uns wohl gerade überschnitten. Hatte es ja auch soeben gemerkt, daß ich ggf. die Frage umformulieren muß - aber wie kann ich dann den boole'schen Wert von confirm() an die folgeseite.html als folgeseite.html?boolewert= .... übergeben????

Zitat von lava
Hm, Denkfehler von mir. confirm() gibt ja bereits ein "Okay" und ein "Abbrechen". Wäre also nur die Frage, ob man die Button-Beschriftungen ändern kann. Die Funktion sieht jetzt so aus:

function confirmwork()
{
  return confirm("Sie wollen eine bereits laufende Umfrage abändern. \n Möchten Sie zunächst die Teilnehmerzahl zurücksetzen?");
}

Aber wie erhalte ich jetzt die entsprechende boolesche Variable, wenn ich
 <form method="get" action="folgeseite.html" onsubmit="return confirmwork()" >
mache? Leider wird der Folgeseite momentan kein entsprechender Query String automatisch mitgegeben.

11.07.2007 14:31

9 Jörg Kruse

Du kannst ein if Konstrukt in die Funktion bauen, dass die bool'sche Variable auswertet, und im Fall des Falles den Wert von action ändert:

<script type="text/javascript">
function confirmfunction()
{
 var confirmation = false;
  confirmation = confirm("Sie wollen eine bereits laufende Umfrage abändern. Wirklich fortfahren?");

  if (confirmation == false) {
    document.Bla.action = 'folgeseite2.html';
  }
}
</script>

<form method="get" name="Bla" action="folgeseite.html" onsubmit="confirmfunction()"><button type="submit"  name="button">los</button></form>

11.07.2007 15:28 | geändert: 11.07.2007 15:29

10 lava

Klingt gut. Aber mit

function confirmwork()
{
  var confirmation = false;
  confirmation = confirm("Sie wollen eine bereits laufende Umfrage abändern. \n Möchten Sie zunächst die Teilnehmerzahl zurücksetzen? ");
  if (confirmation == false){document.bla.action='gen_umfrage.jsp' ;}
}

und
<form method="get" name="bla" action="change_umfrage.jsp" <%if (umfrage.hasteilnehmer()) { %>  onsubmit="confirmwork()" <%} %>>
<input type="hidden" value="bearbeiten" name="case">
<input type="hidden" value="<%=umfrage.getNr()%>" name="changenr">
<input type="hidden" name="reset" <%if (umfrage.hasteilnehmer()){ %> value="yes" <%} %>>
<input type="submit" value="Bearbeiten">

</form>

funktioniert es trotzdem nicht. Er springt IMMER in change_umfrage (mit Übergabe der entsprechenden Parameter), NIE in gen_umfrage.....

Wenn ich allerdings die Zeile
 if (confirmation == false){document.bla.action='gen_umfrage.jsp' ;}
durch
 alert(confirmation);
ersetze, dann merke ich schon, daß er mal true und mal false anzeigt. Also wird scheinbar einfach document.bla.action nicht korrekt überschrieben.... Komm ich denn sonstwie im HTML-Code an die Javascript-Variable confirmation noch dran?
Geht z.B. sowas wie
 <input type="hidden" name="reset" value="javascript:confirmation">
?
Oder meinetwegen auch
 <input type="hidden" name="reset" value="javascript:confirmvalue()">
, wenn confirmvalue() eine Javascript-Funktion ist und ich confirmation als GLOBALE Variable definiere und confirmvalue() diese halt ausgibt.... ?

Leider scheinen beide Aufrufe so nicht zu gehen, egal ob ich mit javascript:confirmation eine Variable ansprechen oder mit javascript:confirmvalue() eine Funktion aufrufen möchte - ist einfach nur die Syntax falsch????

12.07.2007 16:48 | geändert: 12.07.2007 17:21