if Radio-Button checked

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

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

Hallo,

Gibt es eine Möglichkeit, mit ssp abzufragen, ob ein Radio-Button ausgewählt ist?

<td><input name="test" type="radio" value="__lib::artikelnummer2__">
<input type="hidden" name="__lib::artikelnummer2__" value="__check::radio__" ></td>


Wird (Quelltext) so ersetzt
<td><input name="test" type="radio" value="a__4711">
<input type="hidden" name="a__4711" value="1" ></td>


value = "1"   ->  (Cross)Artikel wird in den WK gelegt
value = "0"   ->  (Cross)Artikel wird nicht in den WK gelegt

Die Funktion sollte ungefähr so ausschauen: ??

<!--spmacro:module(check)
sub radio {
my $out = "";
   if  ( Radio-Button == checked ) {
         my $out =  qq | 1 |:
       } else {
         my $out = qq | 0|;
     }
   main::mprint $out;
}
-->

Wenn ich mit meiner Überlegung richtig liege, sollte das funktionieren, aber dazu fehlt mir der blaue Codeteil       
mfG
dobra

ahe

Hallo dobra,

so sollte es gehen...

if (ssp::get_var_form("test") eq $ssp::undefined) {
    ## Es ist NICHTS ausgewählt
}


analog dazu

if (ssp::get_var_form("test") ne $ssp::undefined) {
    ## Es ist IRGENDWAS ausgewählt
}


und ausserdem

if (ssp::get_var_form("test") eq "a__4711") {
    ## Es ist GENAU der Eintrag mit value="a__4711" ausgewählt
}
MfG ahe

dobra

#2
Hallo ahe,

Danke für die superschnelle Antwort.

Habe es mit allen 3 Versionen versucht - funktioniert aber nicht...

Habe da scheinbar einen Gedankenfehler gemacht?
value = "__check::radio__" wird beim absenden (mit <form method="post" action="__xformcart__">) nicht ersetzt.

Nachtrag: 

mit
my $x = ssp::get_var_form("test");
main::mprint &x
wird im WK mit __check::radio__  die Artikelnr.  (z.B. a__4564 ) ausgegeben
Das funktioniert also

Aber eq $ssp::undefined  und ne $ssp::undefined wird ignoriert
eq "__lib::artikelnummer2__"  (würde "übersetzt" doch wenn a__4564 == a__4564 heißen ??
mfG
dobra

ahe

Wie sieht denn Ihr momentaner SSP-Code und HTML-Code aus?
MfG ahe

dobra

mfG
dobra

dobra

#5
offensichtlich habe ich da wirklich einen Gedankenfehler gemacht  :'(

ohne "my" innerhalb der if-Bedingung wird  value="__check::radio__"  ersetzt
ABER auf der Detailseite -> also bei ALLEN Positionen value="0" da ja beim laden noch nichts ausgewählt ist.
Beim Absenden (erst da sollte es ja ersetzt werden) wird dann auch bei allen Artikeln dieses "0" gesendet (egal ob etwas ausgewählt ist oder nicht)

Wie kann ich es machen, daß value="__check::radio__" erst NACH dem absenden (also im WK) ersetzt wird?

Ich vermute mal, daß ich dazu eine clientseitige JS-Abfrage brauche?
<input type="radio" .... onclick=checkedon()>
Aber wie müßte die checkedon() - Funktion ausschauen, damit - wenn der Radiobutton ausgewählt ist - das value bei type="hidden" von "0" auf "1" gesetzt wird?
irgendwie mit inertHTML und mit <div id="testirgendwas"></div> die ganze Zeile <input type="hidden" name="__lib::artikelnummer2__" value="1" > einfügen?
Allerdings müßte die Zweile ja, wenn dann doch ein anderer Artikel ausgewählt wird, wieder entfernt werden...

...ein softwareseitiges __wkradio__ (s.Wunschliste) wäre soooooo schön und einfach ..........  ::)

mfG
dobra

ahe

Zitat von: dobra am Juli 02, 2007, 18:44:58
Ich vermute mal, daß ich dazu eine clientseitige JS-Abfrage brauche?
<input type="radio" .... onclick=checkedon()>
Aber wie müßte die checkedon() - Funktion ausschauen, damit - wenn der Radiobutton ausgewählt ist - das value bei type="hidden" von "0" auf "1" gesetzt wird?
irgendwie mit inertHTML und mit <div id="testirgendwas"></div> die ganze Zeile <input type="hidden" name="__lib::artikelnummer2__" value="1" > einfügen?
Vorausgesetzt das hidden Input würde sein
<input type="hidden" name="testitem" id="testitem" value="0">
Das könnten Sie mittels JS so ändern
document.getElementById('testitem').value = "neuer Wert";
ändern.
MfG ahe

dobra

#7
Hallo ahe,

Hab's mal so vesucht:

in .js Datei

function checked()
{
document.getElementById('__lib::artikelnummer2__').value = "1";
}

(und dann auch versuchsweise noch mit ['__lib::artikelnummer2__'])

in cross.txt

   <tr>
      <td><input name="test" type="radio" value="__lib::artikelnummer2__" onclick="checked(this);">
      <input type="hidden" name="__lib::artikelnummer2__" id="__lib::artikelnummer2__" value="0" ></td>
   </tr>

wird im Quelltext so geschrieben

      <td><input name="test" type="radio" value="a__4542" onclick="checked(this);">
      <input type="hidden" name="a__4542" id="a__4542" value="0" ></td>

Aber wenn ich auf einen Radiobutton klicke, bekomme ich die Fehlermeldung:
"Das Objekt unterstützt diese Aktion nicht"

Was habe ich falsch gemacht?
mfG
dobra

ahe

Gibt es auf der Seite noch ein zweites Element mit id="a__4542"?
MfG ahe

dobra

nein

je nur 1x  name="a__4542"
              value="a__4542"
              und id="a__4542"
mfG
dobra

ahe

Nennen Sie die Funktion mal mychecked ;)
MfG ahe

dobra

jetzt sagt er
" 'document.getElementById(...)' ist Null oder kein Objekt "

function mychecked()
{
document.getElementById('__lib::artikelnummer2__').value = "1";
}

das __lib::artikelnummer2__ wird also zwar im Quelltext richtig ersetzt, aber nicht in JS

.......  was tun???
mfG
dobra

ahe

Das muss gehen  ;D
Beim Aufbau der Seite im Browser werden von ShopPilot alle Identifier ersetzt.
Da Sie erst nach dem Aufbau der Seite auf den Button klicken können muss zu diesem Zeitpunkt auch schon der Identifier (auch in JS) ersetzt sein.

Lassen Sie sich doch in der Funktion mal mit alert('__lib::artikelnummer2__'); ausgeben welche Id schlussendlich beim Klicken benutzt wird.
MfG ahe

dobra

alert Ausgabe

"__lib::artikelnummer2__"

wird also doch nicht ersetzt  ???
mfG
dobra

ahe

Ich habe es nun mal in einem Testshop (Vorlage der Startseite) nachgebaut.
Alles funktioniert bestens... Im IE 7 und im FF.
Die Ausgaben der alerts sind (im FF)
1. [object HTMLInputElement]
2. 1

<!--spmacro:module(lib)
sub artikelnummer2 {
    main::mprint("testitem");
    return 'noinc';
}
-->                       

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

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

MfG ahe