dobra: confirm-Fenster zeitverzögert anzeigen

Hallo,

Ich habe ein kleines Scrips gebastelt, daß Infos zum Lagerstand anzeigen soll:

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 die " + elem.value + " Stück bestellen?" ))
 {}  // OK -> hier passiert nichts
 else
 {
  elem.value =  "";  // Eingabe löschen
 }
  }

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 die " + elem.value + " Stück bestellen?"))
 {}  // OK
 else
 {
  elem.value =  "";  // Eingabe löschen
 }
  }
}

soweit funktioniert es.

Mein Problem ist folgendes:
wenn Lagerstand ist "0" => if (max == "0") und der Kunde will 15 Stück bestellen, kommt die Meldung bereits bei Eingabe "1"
Er muß also dann auf "OK" klicken und kann dann erst "5" eingeben woraufhin wieder die Meldung kommt.
Das nervt natürlich...
Habe versucht mit if (confirm(setTimeout ("diese Farbe ... Stück bestellen?",500 )))  eine Zeitverzögerung einzubauen, aber das funktioniert nicht :(

Kann mit bitte jemand - für JS-Anfänger verständlich ;) - helfen?

Vielen Dank im Voraus
dobra

  1. Hi,

    wenn Lagerstand ist "0" => if (max == "0") und der Kunde will 15 Stück bestellen, kommt die Meldung bereits bei Eingabe "1"

    dann rufst Du die Funktion zum falschen Zeitpunkt auf, beispielsweise onkeyup anstatt onchange.

    Er muß also dann auf "OK" klicken und kann dann erst "5" eingeben woraufhin wieder die Meldung kommt.

    Apropos "5": Ist Dir eigentlich bewusst, dass "2" größer also "100" ist?

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. dann rufst Du die Funktion zum falschen Zeitpunkt auf, beispielsweise onkeyup anstatt onchange.

      »»

      Der Aufruf erfolgt dynamisch
      ...
      my $vcount = ssp::get_var_varticle("LBSAUTO", $i);
      ...
      $input= qq|<input onkeyup="checkCount(this,$vcount);" name="a__$id" value=0 SIZE=1 style="width:20px;"> |;
      ...

      wenn ich die Funktion mit onchange aufrufe, kommt die Meldung erst, wenn der Kunde irgendwo anders hinklickt - das ist hier eigentlich nicht erwünscht...
      guck mal hier http://www.woll-insel.at/wip-cgi-bin/woll-insel-Partnershop/iboshop.cgi?showd90!0
      ist vielleicht verständlicher als meine Erklärung was ich machen will.

      In der linken Spalte habe ich jetzt mal onchange - mitte und rechts onkeyup
      Lagerstand (Test) für weiß - 10, gelb - 0 (mit onkeyup), flieder - 100 und natur - 0 (mit onchange)

      Apropos "5": Ist Dir eigentlich bewusst, dass "2" größer also "100" ist?

      in diesem Fall nicht - habe es gerade nochmal getestet, wenn ich Lagerstand 100 eingebe, kann ich 5, 9 oder 99 eintippen OHNE daß die Meldung eingeblendet wird. (auf der Demoseite erste Zeile rechts - flieder)

      mfG
      dobra

      1. sorry - habe den Link zur Testseite nicht komplett kopiert.
        hier ist der richtige:
        http://www.woll-insel.at/wip-cgi-bin/woll-insel-Partnershop/iboshop.cgi?showd90!0,,BAMBINI

      2. Hi,

        Der Aufruf erfolgt dynamisch
        my $vcount = ssp::get_var_varticle("LBSAUTO", $i);
        $input= qq|<input onkeyup="checkCount(this,$vcount);" name="a__$id" value=0 SIZE=1 style="width:20px;"> |;

        serverseitiger Code macht das Verstehen und Nachvollziehen clientseitiger Probleme nie einfacher, aber oft komplizierter, manchmal gar unmöglich. Bitte poste nächstes Mal das, was tatsächlich beim Client ankommt.

        wenn ich die Funktion mit onchange aufrufe, kommt die Meldung erst, wenn der Kunde irgendwo anders hinklickt

        Nein, sondern dann, wenn das input-Element den Focus verliert (das ist unter anderem auch der Fall, wenn man irgendwo außerhalb des Feldes klickt). Also auch dann, wenn man mit [Tab] zum nächsten Feld springt oder mit [Enter] das Formular absenden möchte.

        • das ist hier eigentlich nicht erwünscht...

        Problem hier: Woher soll ein Computer wissen ... nein, anders: Woran soll ein Computer *erkennen*, dass ich nach der Ziffer 1 noch eine 5 eingeben möchte? Das ist so nicht möglich. Und auch wenn du die Meldung zeitverzögert anzeigst - es wird immer einen geben, der so schläfrig tippt, dass für ihn die Meldung zu schnell kommt.

        Besser wäre also, die Information "nur ** Stück lieferbar" als normalen Text in der Nähe des Eingabefelds anzuzeigen und bei jeder Eingabe (hier wäre onkeyup denkbar) anhand des eingegebenen Werts ggf. unsichtbar zu machen.

        Apropos "5": Ist Dir eigentlich bewusst, dass "2" größer also "100" ist?
        in diesem Fall nicht - habe es gerade nochmal getestet, wenn ich Lagerstand 100 eingebe, kann ich 5, 9 oder 99 eintippen OHNE daß die Meldung eingeblendet wird. (auf der Demoseite erste Zeile rechts - flieder)

        Dann hast du anscheinend daran gedacht, den Wert aus dem Eingabefeld von String nach Number zu wandeln.

        So long,
         Martin

        --
        Lieber eine Fliege im Porzellanladen
        als ein Elefant in der Suppe.
        1. Hallo

          Besser wäre also, die Information "nur ** Stück lieferbar" als normalen Text in der Nähe des Eingabefelds anzuzeigen und bei jeder Eingabe (hier wäre onkeyup denkbar) anhand des eingegebenen Werts ggf. unsichtbar zu machen.

          Danke für den Gedankenanstoß

          • werde mal versuchen, statt der Alermeldung einen css-Kasten (disply:none) einzubauen, der mit "eingetippte Menge > Lagerstand" auf display:block gesetzt wird.

          Bei Lagerstand 0 wird der dann zwar auch schon bei der 1. Zahl eingeblendet, aber der Kunde kann die 2. Zahl eintippen ohne vorher das Meldungsfester schließen zu müssen. (und dabei auch "schlafen" ;))

          mfG
          dobra