http://www.perlmonks.org?node_id=1010753

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

First time posting so I appreciate any replies and patience required to deal with me.

Clicking a button builds some additional HTML. Now, included in that additional HTML is another button. I want the new button to perform some additional task using CGI::AJAX as well. I've got no problem getting the initial CGI::AJAX setup and working, but I'm not sure where to start on getting the second button declared with a new subroutine to parse.

Some sample code.

After clicking whoohoo I want to now click whoopy and change the 'innerDiv' from poop to tinkle.

#!/usr/bin/perl use strict; use warnings; use CGI ':standard'; use CGI::Ajax; # use CGI::Carp qw(fatalsToBrowser); # Uncomment for debugging ajaxifyView(); sub ajaxifyView { my $cgi = new CGI; my $ajx = new CGI::Ajax ( 'viewsub' => \&subViewSub ); $ajx->JSDEBUG(0); print $ajx->build_html ($cgi, \&buildHTML); } sub buildHTML { my $q = new CGI; my $html; $html .= $q->start_html; $html .= $q->start_table; $html .= $q->Tr( $q->td($q->textfield(-name=>'pantyhoes', -id=>'pantyhoes', + -value=>'sometext')) ); $html .= $q->Tr( $q->td($q->button(-name=>'whoohoo', -onclick=>"viewsub(['p +antyhoes'], ['DisplayDiv'])")), $q->td($q->div({-id=>'DisplayDiv'}, 'ReplaceMe')) ); $html .= $q->end_table; $html .= $q->end_html; return $html; } sub subViewSub { my $q = new CGI; my $innerHTML; $innerHTML .= $q->hidden(-name=>'smoosh', -value=>"tinkle"); $innerHTML .= $q->button(-name=>'whoopy', -onclick=>"viewsub([ +'smoosh'], ['innerDiv'])"); $innerHTML .= $q->div({-id=>'innerDiv'},"poop"); return ($innerHTML); }

Replies are listed 'Best First'.
Re: CGI::AJAX inside CGI::AJAX
by Anonymous Monk on Dec 28, 2012 at 22:54 UTC

      Found the answer in pjx_chained.pl. Didn't know about the Manifest feature of CPAN, I appreciate the pointer. I'm not ready to start writting Javascript too, I've only been working with Perl for about two months now. So far I've gotten away with very minimal javascript.

      The answer was to add another sub to my $ajx object declaration as seen below:

      my $ajx = new CGI::Ajax ( 'viewsub' => \&subViewSub, 'updatesu +b' => \&UpdateSub );

      Previously this was only the viewsub, but adding updatesub allows me to reference that routine from the buttons that were created by the first one.