Hallo,
ich habe abgespeckt und unten die Sources angegeben.
Ablauf:
In Textareafeld eingeben: 1234567890
In Textfeld springen
Ergebnis: false
Auf Senden klicken
Ergebnis: true
Wenn ich in der JS-Routine das mit max8ziffern identische max8ziffern1 aufrufe, kommt korrekterweise zweimal "false".
test.pl:
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my ($mitt);
sub up1
{formularausgabe();}
sub up2
{formularausgabe();}
sub formularausgabe
{
use CGI qw(header);
print header(-type=>'text/html; charset=ISO-8859-1');
print <<FORMULAR;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>test</title>
<script type="text/javascript" src="http://www.example.de/JS/testpruefungen.js"></script>
</head>
<body>
<form action="http://www.example.de/cgi-bin/test.pl" method="post" name="test"
onSubmit = "return formulartest(this)">
<input type="hidden" name="aufruf" value="2">
<textarea id="iMitteilung" name="Mitteilung" rows="2" cols="15"
onchange="feldpruefung(this, 'max8ziffern')">$mitt</textarea>
<input type="text" name="test" onchange="feldpruefung(this, 'max8ziffern')">
<input name="Senden" value="Senden" type="submit">
</form>
</body>
</html>
FORMULAR
}
my $cgi = new CGI;
$mitt = $cgi->param('Mitteilung');
if ($cgi->param('aufruf') == 2)
{
up2();
}
else
{
up1();
}
exit 0;
testpruefungen.js:
function feldpruefung()
{
var tmpfld = arguments[0].value
// In Originalversion mehrere Prüfungen (arguments.length > 4)
var i
for(i = 1; i < arguments.length; i++)
{alert((arguments[i] + "('" + tmpfld + "')"));
if (!(eval(arguments[i] + "('" + tmpfld + "')")))
{
return false
}
}
return true
}
function formulartest(f)
{
return feldpruefung(document.getElementById("iMitteilung"), 'max8ziffern')
}
function max8ziffern(s)
{
alert ("max8ziffern: " + s + " Ergebnis: " + !(/([0-9]{9,})/g).test(s));
return !(/([0-9]{9,})/g).test(s)
}
function max8ziffern1(s)
{
alert ("max8ziffern1: " + s + " Ergebnis: " + !(/([0-9]{9,})/g).test(s));
return !(/([0-9]{9,})/g).test(s)
}