http://qs1969.pair.com?node_id=575516

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

Hi, I am having a seperate Jscript file called ValidateForm and it has a function ValidateForm(). I have included the code below and the Error I am getting.
$JSCRIPT=<<END; var cal = new CalendarPopup("testdiv"); cal.setCssPrefix("TEST"); cal.showYearNavigation(); END $JSCRIPT2=<<END2; writeSource("jscal1"); END2 print start_html(-style=>{-src=>['/styles/print.css','/styles/yreg_lit +e_v5.css'],-media => 'all'},-title=>'MIS - People Data', -script=>[ {-language => 'JavaScript',-src => i '/javascript/ValidateForm +.js'}, {-language => 'JavaScript',-src => '/javascript/CalendarPopup.js'}, {-language => 'JavaScript',-src => '/javascript/AnchorPosition.js'}, {-language => 'JavaScript',-src => '/javascript/date.js'}, {-language => 'JavaScript',-src => '/javascript/PopupWindow.js'},{ -id +=>'jscal1',-code=>$JSCRIPT},$JSCRIPT2]); print table({-width=>'97%',-cellpadding=>4,-cellspacing=>5}, Tr({-align=>RIGHT,-valign=>TOP}, td( submit(-name=>'Update',-value=>'Update',-onClick(Validat +eForm(this.form)))) ) );
Error Message Software error: Undefined subroutine &main::ValidateForm Help me

Replies are listed 'Best First'.
Re: JScript and Perl
by gellyfish (Monsignor) on Sep 29, 2006 at 12:27 UTC

    You've got the quoting wrong in the

    print table({-width=>'97%',-cellpadding=>4,-cellspacing=>5}, Tr({-align=>RIGHT,-valign=>TOP}, td( submit(-name=>'Update',-value=>'Update',-onClick(Validat +eForm(this.form)))) ) );
    I think you want something like:
    print table({-width=>'97%',-cellpadding=>4,-cellspacing=>5}, Tr({-align=>RIGHT,-valign=>TOP}, td( submit(-name=>'Update',-value=>'Update',-onClick => 'Val +idateForm(this.form)')) ) );

    /J\

      Thanks. I have corrected the mistakes and able to compile. But I it is working ie. does not call that function (ValidateForm). No alert message is coming. This is the part of the JScript.
      function ValidateForm(){ var Phone=document.inFOrm.Mobile alert("In JS") if ((Phone.value==null)||(Phone.value=="")){ alert("Please Enter your Phone Number") Phone.focus() return false } }
        Now we're into the world of some other language. In your browser turn on the javascript console (in Mozilla you just type javascript: into the location bar not sure how to do it in IE). You need to find out what kind of error happens when you click on the Submit button. I suspect since your calling ValidateForm(this.form) when you click the button, your function should be modified to use the passed variable...
        function ValidateForm(foo){ alert("In JS"); if ((foo.Mobile.value==null)||(foo.Mobile.value=="")){ alert("Please Enter your Phone Number"); foo.Mobile.focus(); return false; } }
        Also in your code I supsect inFOrm should be inForm which might just fix your problem without rewritting the function like I just did.
Re: JScript and Perl
by wfsp (Abbot) on Sep 29, 2006 at 12:46 UTC
    To add to gellyfish's comment if you had strict and warnings on you would have been alerted to a stray 'i' (see the comment below). There were other quoting issues too (also commented). I've taken the liberty of adding some white space. I don't know if it will now do what you want but at least it compiles which imo is a good start. :-)

    #!/bin/perl5 use strict; use warnings; my $JSCRIPT=<<END; # added my var cal = new CalendarPopup("testdiv"); cal.setCssPrefix("TEST"); cal.showYearNavigation(); END my $JSCRIPT2=<<END2; # added my writeSource("jscal1"); END2 print start_html( -style=>{ -src=>[ '/styles/print.css','/styles/yreg_lite_v5.css' ], -media => 'all' }, -title=>'MIS - People Data', -script=>[ { -language => 'JavaScript', #-src => i '/javascript/ValidateForm.js' -src => '/javascript/ValidateForm.js' # removed the i }, { -language => 'JavaScript', -src => '/javascript/CalendarPopup.js' }, { -language => 'JavaScript', -src => '/javascript/AnchorPosition.js' }, { -language => 'JavaScript', -src => '/javascript/date.js' }, { -language => 'JavaScript', -src => '/javascript/PopupWindow.js' }, { -id=>'jscal1', -code=>$JSCRIPT }, $JSCRIPT2 ] ); print table( { -width=>'97%', -cellpadding=>4, -cellspacing=>5 }, Tr( { -align=>'RIGHT', # quotes added -valign=>'TOP' # quotes added }, td( submit( -name=>'Update', -value=>'Update', -onClick('ValidateForm(this.form)') # quotes added ) ) ) );
Re: JScript and Perl
by fmerges (Chaplain) on Sep 30, 2006 at 15:03 UTC

    Hi,

    By the way, have you thought about using some templating system? just to separate a lil'bit the output from the business logic?

    I think it's also more safe, because creating html output with plain CGI.pm is ...

    Regards,

    fmerges at irc.freenode.net