jQuery Problem - Informationen in einem Textfeld auslesen

08/05/2012 15:31 .Acu³#1
Hey epvp,
habe ein Problem mit jQuery.
Auf einer Produktkonfigurationsseite kann man verschiedene Komponenten wählen (also wie bei diesen PC-Konfigurationsseiten von zb Dell).

Je nachdem was gewählt ist, ändert sich der Preis. Jetzt möchte ich, wenn der Preis eine bestimmte Höhe erreicht automatisch 10% Rabatt anzeigen lassen.

Das Problem: Ich weiß nicht, wie ich das Feld Live überwachen soll. Sowas wie "keydown" oder so geht ja nicht, da es kein Eingabefeld ist.

Hat da jemand eine Lösung?:>
LG, Acu³
08/05/2012 16:38 PseudoPsycho#2
Was ist das denn dann?
Eine Selectbox? -> onChange
08/05/2012 16:52 .Acu³#3
Der Gesamtpreis wird so ausgegeben:
Code:
<span class="netto"> ... </span>

Über eine If Anweisung kann ich ja rausfinden ob ein gewisser Wert erreicht ist also zb
Code:
if($('.netto').text() == '300.00€') {
       $('p.rabatt').fadeIn("fast");
}
Die Frage ist nur, wie ich das immer wieder nachprüfe. Weil so wird es ja nur beim Laden der Seite überprüft, und nicht wenn sich der Preis ändert. Da scheiter ich grade irgendwie..
08/05/2012 17:03 epiTR#4
Code:
$('.netto').onChange(function() {
if($('.netto').text() == '300.00€') {
       $('p.rabatt').fadeIn("fast");
}
});
Damit sollte es funktionieren.
08/05/2012 17:23 .Acu³#5
Leider nein, da tut sich garnichts.

[17:22:12.949] $(".netto").OnChange is not a function
08/05/2012 17:46 kissein#6
Lass serverseitig ein hiddenfield/id setzen auf welches das jquery script seine überprüfung fährt.

Ich weiss das die meisten mit javascript im internet unterwegs sind, aber dieser werte würde ich alles serverseitig steuern. Jquery würde ich hierfür nur die Effekte benutzen aber keine werteberechnung, dass sollte alles vom server geliefert werden.
08/05/2012 21:18 Fratyr#7
Quote:
$('.netto').onChange(function() {
if($('.netto').text() == '300.00€') {
$('p.rabatt').fadeIn("fast");
}
});
Wäre mir persönlich neu das jQuery seine Event Funktionen mit dem "on" Präfix versehen sind. Die korrekte Funktion würde also simpel "change" und nicht "onchange" lauten.
08/05/2012 21:23 .Acu³#8
Richtig, aber auch damit geht es leider nicht.. [Only registered and activated users can see links. Click Here To Register...]
Noch jemand?
08/05/2012 21:59 PseudoPsycho#9
Naja, über <span> lassen sich ja keine Nutzereingaben bewerkstelligen (zumindest nicht ohne das HTML5 "contenteditable" Attribut).
Wahrscheinlich wird der Inhalt also mit einer JS-Funktion erzeugt und die müsstest du abfangen können, wenn du weißt, wie sie heißt. ;)

Edit: Wenn es nur beim Laden serverseitig gesetzt wird, so wäre $(document).ready() die korrekte Methode.
08/05/2012 22:18 .Acu³#10
Genau, der Inhalt wird mit JS erzeugt. Es soll nicht nur beim Laden sein, sondern eben immer aktualisiert werden.. dass es beim Laden klappt ist kein Problem.

Aber ich hab inzwischen eine Lösung:
Man kann ja mehrere Radiobuttons wählen und bei jedem mal wenn jmd was auswählt wird eine Funktion aufgerufen die schaut ob jetzt ein Rabatt möglich ist.

Danke euch trotzdem :>
08/06/2012 11:21 kissein#11
Quote:
Originally Posted by .Acu³ View Post
Genau, der Inhalt wird mit JS erzeugt. Es soll nicht nur beim Laden sein, sondern eben immer aktualisiert werden.. dass es beim Laden klappt ist kein Problem.
JSON ist deine Lösung
[Only registered and activated users can see links. Click Here To Register...]
08/08/2012 14:45 'Ownii#12
Kannst du es nicht einfach so machen, dass wenn man irgendwas neues auswählt, sodass sich der Preis ändern, dann überprüft wird ob man in dem Preisbereich ist, wo man die 10% Rabatt bekommt? Oder sehe ich das falsch? Weil das ist denke ich mal am einfachsten o.O

mfg Ownii
08/18/2012 09:24 FR28#13
Code:
<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js" type="text/javascript"></script>
  </head>
  <body>
    <form action="validate.php" method="POST" target="_self">
      <div class="box">
         <select class="item" name="item[]" size="1">
           <option  value="0" selected="selected">-</option>
           <option  value="1">AMD</option>
           <option  value="2">Intel</option>
         </select>
         <select class="item" name="item[]" size="1">
           <option value="0" selected="selected">-</option>
           <option value="8">MSI</option>
           <option value="9">Asus</option>
         </select>
         <input type="submit" name="go" value="go" />
      </div>
      <div id="price"/>
    </form>
  </body>
</html>

<script type="text/javascript">
  //werte aus DB
  maxPrice=400;
  discount=10;
  // werte aus DB json_encode(array[id][price]);
  priceById=$.parseJSON('{"0":0,"1":100,"2":200,"8":200,"9":300}');

  $('.item').change(function(){
    price=0;
    $(".item option:selected").each(function() {
      price+=parseFloat(priceById[this.value]);
    });
    price=(price>=maxPrice)?price*(1-discount/100)+' Discount 10%':price;
    $('#price').text(price);
  });
</script>
Wenn du eine FormAction hast kannst du das Array $_REQUEST['item'] durchschleifen
und nochmal serverseitig validieren...
das selbe Spiel nachmal
Code:
foreach($_REQUEST['item'] as $id){
   $price+=Db->getPriceById($id);
etc....
die Dropdown Boxen werden natuerlich auch aus der DB generiert....
08/18/2012 20:11 Fratyr#14
Also ich muss ja sagen ich finds irgendwie nett das du generell Fragen mit irgendwelchen Codeschnippseln beantwortest, die längst geklärt sind.

PHP Code:
  maxPrice=400;
  
discount=10
Das wäre gleichzusetzen wenn du in PHP Variablen mit "global" definierst <.< Sowas is
böse! Nur so am Rande : o
PHP Code:
  var maxPrice=400,
       
discount=10
08/18/2012 21:07 FR28#15
Quote:
Originally Posted by Fratyr View Post
Also ich muss ja sagen ich finds irgendwie nett das du generell Fragen mit irgendwelchen Codeschnippseln beantwortest, die längst geklärt sind.

PHP Code:
  maxPrice=400;
  
discount=10
Das wäre gleichzusetzen wenn du in PHP Variablen mit "global" definierst <.< Sowas is
böse! Nur so am Rande : o
PHP Code:
  var maxPrice=400,
       
discount=10
Nur mal so am Rande
Code:
 var maxPrice=400,
       discount=10; //Global weil nicht in einer Funktion...
Nicht mal Klugscheissen kannst du richtig!


Auserdem sind es keine Codeschnipsel, sondern simple Beispiele die funktionieren...
und nicht irgend ein Kopierter Spagettifizierter Code.