alex: cgipm und formularfelder ausgrauen

huhu,

{-disabled=>$disabled}

klingt zwar vielversprechend, doch auch für undef liefert dies mir ein ausgegrautes feld, ich will aber nur ein ausgegrautes feld, sofern $disabled == "disabled"...

im quelltext erscheint dann immer

<... disabled >

aber das interpretiert der browser automatisch als auszugrauen, auch in xhtml.

wie muss ich also die $disabled variable belegen, damit auch mal ein nicht ausgegrautes feld erscheint?

bzw gibts ne andere möglichkeit als:
$disabled ? cgi-funktion mit -disabled : cgi-funktion ohne -disabled

??
danke, alex

  1. Tag alex.

    {-disabled=>$disabled}
    klingt zwar vielversprechend, doch auch für undef liefert dies mir ein ausgegrautes feld, ich will aber nur ein ausgegrautes feld, sofern $disabled == "disabled"...

    Ja, so muss das auch sein:
    "If the first argument is an associative array reference, then the keys and values of the associative array become the HTML tag's attributes." Auszug aus CGI.pm).

    Das heißt, sobald du einen Parameter angibst, wird er dem Element hinzugefügt. Ist der Wert "undef", wird eben nur der Name des Parameters zum (leeren) HTML-Attribut, mit den Folgen wie du sie beobachtet hast. Ergo: Warum lässt du es nicht einfach weg, wenn du es nicht brauchst?

    Kleiner Tipp am Rande: du kannst der Methode auch einen anonymen Hash übergeben:

    my $attribs = { -name => 'foo', -value => 'bar' };  
    if($disabled == 1) {  
      $$attribs{-disabled} = 'disabled';  
    }  
    print textfield ($attribs);
    

    Wenn also die Variable $disabled den Wert 1 hat, dann wird das Attribut angehängt, sonst nicht.

    Siechfred