The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<html><head><title>CGI::FormBuilder::Template::HTC example</title></head>
<body>
<script type="text/javascript"><!-- hide from old browsers
function validate (form) {
    var alertstr = '';
    var invalid  = 0;

    // color: select list, always assume it's multiple to get all values
    var color = null;
    var selected_color = 0;
    for (var loop = 0; loop < form.elements['color'].options.length; loop++) {
        if (form.elements['color'].options[loop].selected) {
            color = form.elements['color'].options[loop].value;
            selected_color++;
            if (color == null || (color != 'red' && color != 'blue' && color != 'yellow' && color != 'pink')) {
                alertstr += '- Select an option from the "Color" list\n';
                invalid++;
            }
        } // if
    } // for color
    if (! selected_color) {
        alertstr += '- Select an option from the "Color" list\n';
        invalid++;
    }

    if (invalid > 0 || alertstr != '') {
        if (! invalid) invalid = 'The following';   // catch for programmer error
        alert(''+invalid+' error(s) were encountered with your submission:'+'\n\n'
                +alertstr+'\n'+'Please correct these fields and try again.');
        // reset counters
        alertstr = '';
        invalid  = 0;
        return false;
    }
    return true;  // all checked ok
}
//-->
</script>

<!-- Generated by CGI::FormBuilder v3.0401 available from www.formbuilder.org -->
<form action="TEST" method="get" onsubmit="return validate(this);"><input id="_submitted" name="_submitted" type="hidden" value="1" />
NAME:<input id="name" name="name" type="text" /><br>
COLOR:<select id="color" multiple="multiple" name="color">
  <option value="red">Red</option>
  <option selected="selected" value="green">Green</option>
  <option value="blue">Blue</option>
  </select><br>
SIZE:42<br>
<input id="_submit" name="_submit" onclick="this.form._submit.value = this.value;" type="submit" value="Update" /><input id="_submit_2" name="_submit" onclick="this.form._submit.value = this.value;" type="submit" value="Delete" /><br>
</form>

<h2>Script: examples/form_htc.pl</h2><p>
<hr>
<h2>The Script:</h2>
<pre>
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use blib;
use CGI::FormBuilder;


use Fcntl qw(:seek);

my ($template, $perlcode);
{
    local $/;
    $template = &lt;DATA&gt;;
    seek DATA, 0, SEEK_SET;
    $perlcode = &lt;DATA&gt;;
}

my $form = CGI::FormBuilder-&gt;new(
    action   =&gt; &#39;TEST&#39;,
    title    =&gt; &#39;TEST&#39;,
    fields    =&gt; [qw/name color email/],
    submit   =&gt; [qw/Update Delete/],
    reset    =&gt; 0,
    template =&gt; {
        scalarref =&gt; \$template,
        type =&gt; &#39;HTC&#39;,
        variable =&gt; &#39;form&#39;,
        tagstyle =&gt; [qw(-classic -comment -asp +tt)],
        data =&gt; {
            script =&gt; $perlcode,
            template =&gt; $template,
            script =&gt; $0,
            perlcode =&gt; $perlcode,
        },
    },
    values   =&gt; { color =&gt; [qw/yellow green orange/] },
    validate =&gt; { color =&gt; [qw(red blue yellow pink)] },
);
my $mod = {
    color =&gt; {
        options =&gt; [[qw/red Red/],[qw/green Green/],[qw/ blue Blue/]],
        type =&gt; &#39;select&#39;,
    },
    size  =&gt; { value   =&gt; 42 }
};
while ( my ( $f, $o ) = each %{$mod} ) {
    $o-&gt;{name} = $f;
    $form-&gt;field(%$o);
}
my $out = $form-&gt;render;
print &quot;$out\n&quot;;


__DATA__
&lt;html&gt;&lt;head&gt;&lt;title&gt;CGI::FormBuilder::Template::HTC example&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
[%= form.jshead%]
[%= form.start%]
NAME:[%= form.field.name.field%]&lt;br&gt;
COLOR:[%= form.field.color.field %]&lt;br&gt;
SIZE:[%= form.field.size.value%]&lt;br&gt;
[%= form.submit%]&lt;br&gt;
[%= form.end%]

&lt;h2&gt;Script: [%= .script %]&lt;/h2&gt;&lt;p&gt;
&lt;hr&gt;
&lt;h2&gt;The Script:&lt;/h2&gt;
&lt;pre&gt;
[%= perlcode escape=html %]
&lt;/pre&gt;
&lt;/body&gt;&lt;/html&gt;

</pre>
</body></html>