JohnMed has asked for the wisdom of the Perl Monks concerning the following question:

Hi,

I am building up a popup_menu and I would like to add an ID and an onChange attribute to the to the <select> tag.

I initially thought I could use the -attribute option but i then realised that it is designed for the various <option> tags and not the select. Is there a way to use the attributed option on the <select> tag? So far i have the below:
my %attributes = ( 'onChange' => 'displaydbfields(' . $n . ')', 'id' => 'coltype' . $n, + ); my $v = popup_menu ( -name => 'type', -values => \@COLUMN_TYPES, -default => $col->{type}, -attributes=> \%attributes, );

Replies are listed 'Best First'.
Re: popup_menu attributes
by glasswalk3r (Friar) on Jan 30, 2006 at 13:18 UTC

    This will depend heavilly on the module that you're using, but looks like you forgot to tell us which one is.

    Supposing that you're talking about CGI.pm, then you may know that almost all HTML tags generated by it doesn't have a written method/function but are created on the fly.

    For example, if you do:

    use CGI; my $cgi = new CGI; print $cgi->br, $cgi->start_br, $cgi->end_br, "\n";

    Will print:

    <br /><br></br>

    Using the same idea I got the code below:

    use warnings; use strict; use CGI; my $cgi = new CGI; my $n = 1; my @COLUMN_TYPES = qw ( one two three four five ); my %attributes = ( 'onChange' => 'displaydbfields(' . $n . ')', 'id' => 'coltype' . $n, ); my $col = { type => 'some type' }; print $cgi->popup_menu( -id => 'coltype' . $n, -name => 'type', -values => \@COLUMN_TYPES, -default => $col->{type}, -attributes => \%attributes, ), "\n";

    Which prints:

    <select name="type" tabindex="1" id="coltype1"> <option value="one">one</option> <option value="two">two</option> <option value="three">three</option> <option value="four">four</option> <option value="five">five</option> </select>
    Alceu Rodrigues de Freitas Junior
    ---------------------------------
    "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill
      Sorry I didn't include the module I was using. I'm still very new to Perl and I forget that there are a several ways to do almost anything.

      Your response was very helpful. I now have the attributes where they are needed.

      Cheers.
Re: popup_menu attributes
by PodMaster (Abbot) on Jan 30, 2006 at 13:51 UTC
    update: bah, I misread

    Hi. Its a good idea to read the manual, which shows this

    %labels = ('eenie'=>'your first choice', 'meenie'=>'your second choice', 'minie'=>'your third choice'); %attributes = ('eenie'=>{'class'=>'class of first choice'}); print popup_menu('menu_name', ['eenie','meenie','minie'], 'meenie',\%labels,\%attributes);
    which will print
    <select name="menu_name" tabindex="1"> <option class="class of first choice" value="eenie">your first choice< +/option> <option selected="selected" value="meenie">your second choice</option> <option value="minie">your third choice</option> </select>
    You see %attributes are keyed by -values. The manual says
    The optional fifth parameter (-attributes) is provided to assign any of the common HTML attributes to an individual menu item. It's a pointer to an associative array relating menu values to another associative array with the attribute's name as the key and the attribute's value as the value.
    individual menu items are <selects>

    MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
    I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
    ** The third rule of perl club is a statement of fact: pod is sexy.