%doc>
<& select.html,
# required
field => 'myfield', # NAME property
curr_value => 'foo',
labels => { # or 'option_labels'
'AL' => 'Alabama',
'AK' => 'Alaska',
'AR' => 'Arkansas',
},
options => [ 'AL', 'AK', 'AR' ],
curr_value => $cgi->param('myfield'),
# recommended
id => 'myid', # DOM id
# optional
size => 1, # to show multiple rows at once
style => '', # STYLE property
multiple => 0,
disabled => 0,
onchange => 'do_something()',
js_only => 0, # disables the whole thing
&>
%doc>
% unless ( $opt{'js_only'} ) {
% }
<%init>
my %opt = @_;
my $labels = $opt{'option_labels'} || $opt{'labels'};
my $curr_value = $opt{'curr_value'};
my $onchange = '';
if ( $opt{'onchange'} ) {
$onchange = $opt{'onchange'};
$onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
$onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack. all onchange
#callbacks should act the same
$onchange = 'onChange="'. $onchange. '"' unless $onchange =~ /^onChange=/i;
}
$opt{'disabled'} = &{ $opt{'disabled'} }( \%opt )
if ref($opt{'disabled'}) eq 'CODE';
$opt{'disabled'} = 'DISABLED'
if $opt{'disabled'} && $opt{'disabled'} !~ /disabled/i; # uuh... yeah?
my @style = ref($opt{'style'})
? @{ $opt{'style'} }
: $opt{'style'}
? ( $opt{'style'} )
: ();
my $style = scalar(@style) ? 'STYLE="'. join(';', @style). '"' : '';
my $size = $opt{'size'} ? 'SIZE='.$opt{'size'} : '';
my $multiple = $opt{'multiple'} ? 'MULTIPLE' : '';
%init>