I am trying to use CGI.pm to build a button for a form that has an onClick
method defined that's supposed to make the page reload itself. Here's the
code I'm using (assume strictures and warnings, and that $q = new CGI;):


Current working code:
---------------------


sub tt_write_form () {

  # Write the omnipresent parts of the form
  print $q->start_form(      # <-- print statement one
          -method   => 'POST',
          -name     => 'my_form'
          );
  
  # Write the reload button
  $q->{'escape'} = 0;   ### Tell CGI.pm not to escape the HTML so we can
preserve the quotes first
  print $q->button(          # <-- print statement two
          -name    => 'reload',
          -value   => 'Reload?',
          -onclick => "location.href=\'$self\'"
          );
  $q->{'escape'} = 1;  ### Tell CGI.pm to start escaping again
          
  # Move on with the form, with HTML escaping back on...
  print $q->p,               # <-- print statement three
        $q->b( "Task:" ),
        $q->br,
        $q->popup_menu(
          -name     => 'task',
          -onchange => 'my_form.submit',
          -values   => ['blank','cfg','loc','inv','bw'],
        );

}
-------------------


Okay, what I'd like to do is tighten that up a bit. I'd like to put it all
inside of one print; statement, but I don't want to have to tell CGI.pm to
turn off HTML escaping for the whole form. I just want to do it for the one
onClick tag in the button. If I don't turn off HTML escaping for that, then
CGI.pm generates an onclick method to the button that says:

    onclick="location.href=&#39;me.cgi&#39;"

When I want it to say

    onclick="location.href='me.cgi'"

If you look above, I have one print; statement for the beginning of the
form, then I turn escaping off (see first ### above), then I print the
button, then I turn escaping back on (2nd ### above), then I go on with my
form with additional print;s. Is there a way to switch HTML escaping off for
just one tag within the CGI method syntax? See ### below:



What I'd like to do:
--------------------

sub tt_write_form () {

  # Write the omnipresent parts of the form
  print $q->start_form(   # <-- only print statement for this whole
subroutine
          -method   => 'POST',
          -name     => 'my_form'
          ),
  
        # Write the reload button 
        $q->button(
          -name    => 'reload',
          -value   => 'Reload?',
          -onclick => 'location.href=\'$self\''  ### <-- somehow set
$q->{'escape'} = 0 JUST for this line???
          ),

        # Move on with the form, with HTML escaping back on (somehow)...
        $q->p,
        $q->b( "Task:" ),
        $q->br,
        $q->popup_menu(
          -name     => 'task',
          -onchange => 'my_form.submit',
          -values   => ['blank','cfg','loc','inv','bw']
          );  # <-- end of only print statment

}
--------------------



***OR*** is there any way to trick CGI.pm into thinking this particular
instance of -onclick isn't the same as the one defined within the module,
while still having it return the correct HTML? (CGI.pm only sends the -name,
-value, and -onclicks to the escapeHTML() routine, and therefore I wouldn't
have to unescape at all).


Thanks!
Tyson



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to