JS Frage zu confirm

Begonnen von dobra, Mai 17, 2008, 11:44:16

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Hallo,

ich habe eine Alertmeldung zu Lagerstand gebastelt:
(im Beispiel ist der Lagerstand 10 Stück und Kunde will 25 Stück bestellen)


das Script schaut so aus:
function checkCount(elem, max) {
if (max == "0") {
   if (confirm("diese Farbe ist leider nicht lagernd \n Lieferzeit ca 14 Tage \n\n möchten Sie " + elem.value + " Stück bestellen?" ))
{}  // OK
else
{
elem.value =  "0";  // Abbruch
}
  }

else if (elem.value > max) {
   if (confirm("leider nur " + max + " Stück sofort lieferbar \n Lieferzeit für " + elem.value + " Stück ca 14 Tage \n\n möchten Sie " + elem.value + " Stück bestellen?" ))
{}  // OK
else
{
elem.value =  "0";  // Abbruch
}
  }
}


Bei "OK" bleibt die eingegebene Menge wie sie ist, bei "Abbruch" wird die Menge auf 0 gesetzt
Das ist IMHO aber für die Kunden nicht eindeutig ersichtlich, was wann passiert und ich möchte statt dessen gerne "ja" und "nein" haben.

Mein Problem ist jetzt, daß man (angeblich - soweit ich das rechergieren konnte) den Buttontext "OK" und "Abbrechen" bei confirm nicht ändern kann  :-\

Problem 2:
wenn man bei Lagerstand 0 z.B. 15 Stück bestellen möchte, kommt nach Eingabe von "1" schon die Alertmeldung und dann bei "5" nochmal
das nervt doch ....

Hat jemand eine Idee, wie ich das anders und besser lösen könnte?

P.S.:
habe versucht, Problem 2 mit setTimeout(...,500) zu lösen
= Kunde soll 500ms Zeit haben, den Wert einzugeben
aber meine Versuche funktionieren nicht und ich schaffe es auch nicht, die Zeitverzögerung die cru im ajaxsearch eingebaut hat, für diesen Zweck anzupassen  :'(
mfG
dobra

ahe

Hallo dobra,

zu 1)
eine Möglichkeit das per JS auf "ja/nein" zu setzen scheint es wirklich nicht zu geben.
Ich würde die Meldung ein wenig ergänzen.
ZB: Klicken Sie OK um fortzufahren oder Abbrechen um den Artikel nicht zu bestellen.

zu 2)
vermutlich stossen Sie die Prüfung per "onkeyup" oder "onchange" an.
Die richtige Variante wäre es, die Prüfung beim "onsubmit" des Formulares anzustossen.
Das wird aufgerufen, wenn das Formular per ENTER oder per Klick auf den Submit-Btn abgeschickt wird.
MfG ahe

dobra

#2
Hallo ahe,

ja - ich rufe die Funktion mit "onkeyup" auf.
Habe auch mit anderen Möglichkeiten experimentiert
- onchange oder onsubmit würde Problem 2 zwar beheben, ist hier aber nicht sinnvoll, da der Kunde ja auch mehrere Varianten bestellen kann, bevor er das Formular absendet.
-> ich verwende in meinen Projekten (fast) ausschließlich __xformcart__ Formulare

Die einzige Möglichkeit, die mir eingefallen ist, ist eben eine Zeitverzögerung für die Meldung, aber das kriege ich nicht hin.

Problem 1 werde ich so machen, wie Sie gesagt haben - das gefällt mir  :D
mfG
dobra

dobra

Hallo nochmal,

setTimeout konnte ich zwar doch noch einbauen - bringt aber nicht den erwarteten Erfolg.
habe ein anderes, eventuell mögliches workaround probiert:

if (max == "0") {
  var Eingabe = window.prompt('diese Farbe ist leider nicht lagernd \n--  Lieferzeit ca 14 Tage  --\n\nwenn Sie den Artikel bestellen möchten, \ngeben Sie bitte hier die gewünschte Stückzahl ein','' )
if (Eingabe != "") {
elem.value =  Eingabe;
} else {
elem.value =  "";  // Abbruch
}
  }



Das funktioniert im FF tadellos, aber im IE nicht wirklich  :-\

Im IE kommt 1.) eine Warnhinweis


2.) wenn man (falls Kund das tut) das dann weggeklickt hat, wird das Eingabefenster nicht zentriert sondern in der oberen linken Ecke angezeigt
- z.T. fehl da der Text, das Eingabefeld ist endlos breit und wenn man auf "Abbrechen" klickt, wird die Eingabe nicht auf " " gestetzt sondern "null" ins das Inputfeld geschrieben...


der IE gehört verboten  :P dann wäre VIELES wesentlich einfacher !!!
mfG
dobra

dobra

und wieder mal ein Nachtrag  ;)

Ich denke, ich habe jetzt eine brauchbare Lösung gefunden - css!

das JS-Script schaut jetzt so aus:
function checkCount(elem, max) {
if (max == "0") {
      document.getElementById('lbsmeldung').style.display='block';
  }

else if (elem.value > max) {
   if  (confirm("leider sind nur " + max + " Stück sofort lieferbar \n--  Lieferzeit für " + elem.value + " Stück ca 14 Tage  --\n\nKlicken Sie auf OK um " + elem.value + " Stück zu bestellen oder auf Abbrechen \num den Artikel nicht zu bestellen bzw die Menge zu ändern."))
{}  // OK
else
{
elem.value =  "";  // Abbruch
}
  } 
}

function boxclosed() {
      document.getElementById('lbsmeldung').style.display='none';
}


der css-code:
#box7 {
position:fixed; top:380px; right:35%; z-index:3; text-align:left;
background:#ffffff;
border:2px solid red;
padding:5px;
}


aufgerufen wird das Script jetzt so:
$input= qq{<input onkeyup="checkCount(this,$vcount);" onchange="boxclosed();" name="a__$id" value=0 SIZE=1 style="width:20px;" onFocus="if(this.value=='0'){this.value=''}"> };

und im HTML-Template:
<div id="lbsmeldung" style="display:none"><div id="box7">dieser Artikel ist leidern nicht lagernd <br> Lieferzeit ca 14 Tage&nbsp; &nbsp; &nbsp; <input border="0" type="button" value="OK" onclick=" document.getElementById('lbsmeldung').style.display='none'"></div></div>  

Bei Lagerstand 0 bekommt der Kunde die Info, kann aber dennoch jede beliebige Menge bestellen und das Infofenster mit klick auf "OK" schließen, oder sonst verschwindet es automatisch, wenn er woanders hin klickt.
Die Optik muß ich allerdings noch ein wenig anpassen  ;)
aber es funktioniert im FF UND IE ! (OHNE irgendwelche Warnhinweise die Kunden "verschrecken" könnten)
mfG
dobra

cru

Zitat von: dobra am Mai 18, 2008, 16:08:39
Die einzige Möglichkeit, die mir eingefallen ist, ist eben eine Zeitverzögerung für die Meldung, aber das kriege ich nicht hin.

Hallo dobra,

obwohl Sie inzwischen eine Lösung gefunden haben.
Wenn Sie etwas zeitverzögert aufrufen möchten geht das folgendermaßen:

window.setTimeout("Funktion()", 1000);

Erster Parameter ist die aufzurufende Funktion.
Zweiter Parameter die Wartezeit in ms.

mfg
cru

dobra

Hallo cru,

Danke für die Antwort.

Ich hatte das irgendwie beim Funktionsaufruf (onkeyup) eingebaut
- die Zeitverzögerung hatte zwar funktioniert, allerdings ist nach Eingabe von 2 Zahlen dann - zeitverzögert - die Meldung 2x (1x mit 1 Zahl und dann nochmal mit 2 Zahlen) gekommen.
mfG
dobra