if Radio-Button checked

Begonnen von dobra, Juli 02, 2007, 13:57:34

« vorheriges - nächstes »

0 Mitglieder und 2 Gäste betrachten dieses Thema.

dobra

wenn ich den JS-Code SO (mit <script...) direkt in die HTML-Vorlage schreibe, kommt jetzt die alert_meldung

" [objekt] "  und " 1 "

wenn ich es ohne <script> </script> in die externen js-Datei kopiere (wie ich es normalerweise mache), kommt
" Objekt erwartet "

Ist mir zwar nicht ganz klar, warum aber OK - Script direkt in die Vorlage schreiben statt in externe js-Datei ist das kleinste Problem.

Aber wenn ich jetzt (in der Vorlage)
<script type="text/javascript">
function checked()
{
document.getElementById('__lib::artikelnummer2__').value = "1";
}
</script>

schreibe, kommt auch " Objekt erwartet " 

Habe ich bei meinem JS-Script einen Fehler eingebaut?

mfG
dobra

ahe

Haben Sie die Funktion "checked" oder "mychecked" genannt?
MfG ahe

dobra

oups

da habe ich den alten Code mit "checked" kopiert

Habs's jetzt auf "mychecked" ausgebessert
= KEINE Fehlermeldung mehr, aber der Crossartikel wird auch nicht in den WK gelegt





....wenn ich diese letzte Hürde noch schaffen könnte,,,,,,
mfG
dobra

dobra

ich glaube, ich habe den Fehler gefunden (?)
(aber keine Lösung dafür  :()

habe testweise mal das geschrieben

function mychecked()
{
        var myElem = document.getElementById('__lib::artikelnummer2__');
        alert('__lib::artikelnummer2__');
        myElem.value = "1";
        alert(myElem.value);
    }
</script>


jetzt wird (bei ALLEN Crossartikeln) die Artikelnummer des Hauptartikels ausgegeben

d.h. __lib::artikelnummer2__ wird nicht durch die Cross-Artikelnr, ersetzt (aber nur für diese verwendet)
mfG
dobra

dobra

#19
Vielleicht (??) bin ich der Lösung einen kleinen Schritt näher gekommen:

Habe nach unendlich vielen Fehlversuchen einen Code gefunden, der in alert die jeweils richtige Artikelnummer ausgibt.
zur besseren Kontrolle habe ich bei jedem Crossartikel die Artikelnummer ausgegeben und das <input type "hidden"..> in der cross.txt Datei weggelassen

in externer JS-Datei:
function checkvalue (el)
{
    alert('<input type="hidden" name="' + el.value + ' " value="1" >');
}

in cross.txt:
<td><input name="test" type="radio" value="__lib::artikelnummer2__" onclick="checkvalue(this)"></td>


(Rabiobox anklicken -> Alertmeldung)

Das funktioniert jetzt so bei allen Crossartikeln aber es nutzt mir noch nichts  ;)
Ich brauche ja keine Alertmeldung, sondern ein "wenn ausgewählt mit Hauptartikel in den WK legen"

komme nicht dahinter, wie ich das anstellen kann.......
mfG
dobra

ahe

Liegen auch alle relevanten <input>s innerhalb des <form></form>?
Zu dem Zeitpunkt wo Sie auf "Bestellen" klicken müssen sich also mindestens

<input name="a__hauptartikel" value="1">
<input name="a__cross1" value="1">
<input type="submit">

innerhalb des <form></form> befinden.
MfG ahe

dobra

#21
so schaut der komplette Code im Moment aus
Detailseite http://www.woll-insel.at/Bilder/temp.txt
cross.txt http://www.woll-insel.at/Bilder/cross.txt

<input name="a__hauptartikel" value="1"> funktioniert aber nicht, da damit nur der Hauptartikel (Einheit) in den WK gelegt wird und nicht die ausgewählte Menge
habe das so gelöst:

              <SELECT name="METER____artnr__" id="Liter" size="1" onchange="getFlaschen(this)" >
                <OPTION id="1" value="0,5">0.5 Liter</OPTION>
                <OPTION id="2" value="0,75">0.75 Liter</OPTION>            
                <OPTION id="3" value="1">1 Liter</OPTION>
              </SELECT>
           <input type="hidden" name="__print::xartnr__" value="1" size="1">  bestellen  __id__</td>

sub xartnr {
   my $out = qq |a____artnr__|;
    main::mprint($out);
}
mfG
dobra

ahe

Gibt es schon eine URL unter der ich das mal testen kann?
MfG ahe

dobra

leider nein (läuft nur mit LiveView)

habe das aktuelle Shop Projekt (ohne Bilder und Detailbeschreibungstexte)  mal auf den Server gelegt
(link kommt per mail)
mfG
dobra

dobra

#24
ein halber  Erfolg:

Habe eine Scriptversion zusammengebastelt, die mit FF (ohne Fehlermeldung in der Konsole !) funktioniert  ;D

mit IE aber garnicht (kann nicht mal die Crossartikel anzeigen)   :'(

function checkvalue (el)
{
document.getElementById(el.value).value = "1";
}


und

<input name="test" type="radio" value="__lib::artikelnummer2__" onclick='checkvalue(this)'>
<input type="hidden" name="__lib::artikelnummer2__" id="__lib::artikelnummer2__" value="0" >


was hat der besch...  IE gegen dieses Script?

NACHTRAG

HURRRAAAAA  ;D ;D  es funktioniert auch mit IE
(hatte noch "alte Leichen" - Codeschnipsel von vorherigen Versuchen-  herumliegen die quer geschossen haben)

Jetzt bleibt noch ein Problem:
ich müßte noch irgendeine Abfrageschleife einbauen - wenn man vor dem Absenden mehrere Radioboxen hintereinander anklickt, wird zwar nur die letzte als ausgewählt angezeigt, aber alle gesendet....

Hat jemand eine Idee, wie ich das angehen könnte?

Mein Versuch:
function checkvalue (el,__artnr__) {
if(document.getElementById(__artnr__).checked == false) {
document.getElementById(el.value).value = "0";
} else {
document.getElementById(el.value).value = "1";
}
}


mit
<input id="__artnr__" name="test" type="radio" value="__lib::artikelnummer5__" onblur='checkvalue(this)'>
<input type="hidden" name="__lib::artikelnummer2__" id="__lib::artikelnummer5__" value="0" >

funktioniert nicht.......
mfG
dobra

ahe

Hallo dobra,

Sie könnten beim Aufbau der Seite per SSP eine globale Javascript-Variable schreiben lassen.
Das sollte dann ein JS-Array sein, das alle Artikelnummern enthält.

ZB __lib::printitemarray__
Gibt aus var m_items = new Array('itemid1', 'itemid2', 'itemid3');

In der Onclick-Funktion durchlaufen Sie dann dieses Array, holen sich dabei alle entsprechenden input's und setzten value="0".
Danach setzen Sie dann wie gehabt den angeklickten Artikel auf value="1".
MfG ahe

dobra

Hallo ahe,

beim 5.x lesen fange ich (sehr) langsam an, das zu verstehen  ;)

ich setze also mit onclick in der Radiobox zuerst alle Artikel auf value="0" und dann den ausgewählten auf "1" ?

Ist ja garnicht so kompliziert, wie's im ersten Moment ausgeschaut hat (wenn ich den ssp-Code schaffe)
- hoffentlich weiß mein Code dann auch, in welcher Reihenfolge er das machen soll  :D
mfG
dobra

ahe

Zur Verdeutlichung mal ein kleines Beispiel zum einfügen von JS mittels SSP.

Das Script fügt die globale Variable wie oben beschrieben ein.
Voraussetzung ist, dass Crossartikel in "Ergänzung 4" eingetragen sind.

<!--spmacro:module(jstest)
sub printcrossartikelarray {
    my $index = shift;
    my $anzahl = shift;
   
    if ($index <= $anzahl) {
        my $cross = ssp::get_var_article('ergaenz4', $index);
               
        ## Liste der Artikelnummern liegt in einem String vor.
        ## Deshalb hier in ein Array aufsplitten und alle Elemente in einfachen Anführungszeichen setzten
        ## damit diese Elemente dann einfach so genommen und als Javascript-Text ausgegeben werden können.
        my @crossids = split(",", $cross);
        for (my $i = 0; $i < scalar(@crossids); $i++) {
            $crossids[$i] = "'" . $crossids[$i] . "'";
        }
       
        ## Ab hier das JS ins HTML-Dokument schreiben
        my $out = qq|<script type="text/javascript">|;
        ## Hier die globale Variable anlegen.
        ## join erzeugt einen String, der alle Elemente aus @crossids enthält und sie durch ',' trennt.
        $out .= "var m_itemids = new Array(" . join(",", @crossids) . ");";
        $out .= "</script>";
        main::mprint($out);
    }
}
-->
MfG ahe

dobra




ein ganz großes DANKE an ahe
mfG
dobra