• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Mehrer Select Optionen nach change zusammenzählen

Ibu400

New member
Hallo,

ich komme irgendwie nicht weiter. Ich habe mehrere select optionen z.B.

Code:
<select name="options[90]" id="select_90" class=" required-entry product-custom-option">
<option value="">-- Bitte wählen --</option>
<option value="764" price="0">Standard Ausführung</option>
<option value="765" price="62">Schweizer Ausführung +62,00 €</option>
</select>

<select name="options[89]" id="select_89" class=" required-entry product-custom-option">
<option value="">-- Bitte wählen --</option>
<option value="758" price="0">Mineralguss Weiß mit Hahnloch</option>
<option value="759" price="75">Mineralguss Weiß ohne Hahnloch +75,00 €</option>
<option value="760" price="75">Mineralg. Pergamon m. Hahnloch +75,00 €</option>
<option value="761" price="150">Mineralg. Pergamon o. Hahnloch +150,00 €</option>
<option value="762" price="306">Glas Anthrazit +306,00 €</option>
<option value="763" price="436">Glas Optiwhite +436,00 €</option>


</select>

usw.

der Kunde kann auswählen was er möchte - nach jedem "change" soll berechnet werden ob bei allen select:selected die Summe für price größer als 0 ist - dann soll erstmal ein alert ausgegeben werden.

ich habe es schon mit jquery change probiert :

Code:
$( "select" )
  .change(function () {
    var str = "";
      $( "select option:selected" ).each(function() {
      str + = $( this ).data("price");
    });
    alert(text( str ));
  })
  .change();

aber irgendwie funktioniert es nicht :(

danke
 
Ich würde da ein "data-" vor selbst erfundene Attribute packen, dann ist dein HTML valide. Und ich glaube, dass auch nur damit die .data() Funktion von jQuery funktioniert (sonst bräuchtest du .attr()).

Wo ist denn die Funktion text() definiert?

Steht etwas in der Fehlerkonsole?
 
PS. statt
Code:
$(this).data("foo")
kann man auch ganz profan
Code:
this.dataset.foo
schreiben, solange wie man keine Datenkonvertierung braucht.
 
Selbst wenn die jeweiligen Attribute mit data- anfangen würden, müsste man vor der Addition eine Umwandlung in einen numerischen Typ vornehmen, beispielsweise mit parseInt

So könnte es gehen:
Code:
<select name="options[90]" id="select_90" class=" required-entry product-custom-option">
<option value="">-- Bitte wählen --</option>
<option value="764" data-price="0">Standard Ausführung</option>
<option value="765" data-price="62">Schweizer Ausführung +62,00 €</option>
</select>

<select name="options[89]" id="select_89" class=" required-entry product-custom-option">
<option value="">-- Bitte wählen --</option>
<option value="758" data-price="0">Mineralguss Weiß mit Hahnloch</option>
<option value="759" data-price="75">Mineralguss Weiß ohne Hahnloch +75,00 €</option>
<option value="760" data-price="75">Mineralg. Pergamon m. Hahnloch +75,00 €</option>
<option value="761" data-price="150">Mineralg. Pergamon o. Hahnloch +150,00 €</option>
<option value="762" data-price="306">Glas Anthrazit +306,00 €</option>
<option value="763" data-price="436">Glas Optiwhite +436,00 €</option>


</select>

usw.

Code:
$( "select" )
  .change(function () {
    var str = 0;
      $( "select option:selected" ).each(function() {
      str += parseInt($( this ).data("price"), 10);
    });
    if(str>0)
       alert(str);
  })
  .change();

EDIT: Du solltest mit Deinen eingefügten Leerzeichen vorsichtig umgehen. Der Operator += gehört nicht getrennt!
 
Zuletzt bearbeitet:
da jQuery die Zahl vorher immer konvertiert (wenn auch vielleicht mit einem falschen Radix) dann hilft dir auch kein parseInt() mehr, da du keinen String aus .data() bekommst. Da mußt du auf die Originaldaten zugreifen (ohne jQuery, sh. post #3).
 
das mit den führenden nullen ist doch aber käse, dann kommt der nächste und hat führende - oder # oder ä.
warum sollte man führende 0 verwenden? vor allem in einem data-attribut?
 
Das ist eine sehr gute Frage. Ich hab's aber schon gesehen ... die Daten kamen über eine Query aus einer Datenbank und wurden aus Anzeigegründen mit führenden Nullen versehen (4stellig sogar) und 1:1 in ein Data-Attribut übertragen. Da ich serverseitig nicht eingreifen konnte (durfte), musste ich client-seitig die Null-Lösung ausbaden :)
 
Zurück
Oben