2016-03-27 11 views
0

Ich bin in einem Stück Code stecken. Ich kann ein Formular nicht validieren, wenn ich xsl verwende. Aber das gleiche funktioniert mit HTML.xsl Form Validierung mit Javascript

Es ist wirklich komisch und ich kenne die Lösung nicht.

Mein HTML-Code, der perfekt funktioniert.

<body> 
<form name="myform" method="post" action="http://www.google.com" onsubmit="return validateform()" > 
Name: <input type="text" name="name"><br/> 
Password: <input type="password" name="password"><br/> 
<input type="submit" value="register"> 
</form> 
</body> 

Mein XSL-Code, die es nicht validieren und erreicht direkt die URL.

<xsl:element name="form"> 
        <xsl:attribute name="name">myform</xsl:attribute> 
        <xsl:attribute name="method">post</xsl:attribute> 
        <xsl:attribute name="action">http://www.google.com</xsl:attribute> 
        <xsl:attribute name="onsubmit">return validateform();</xsl:attribute> 

        <xsl:element name="input"> 
        <xsl:attribute name="type">text</xsl:attribute> 
        <xsl:attribute name="name">name</xsl:attribute> 
        </xsl:element> 

        <xsl:element name="input"> 
        <xsl:attribute name="type">password</xsl:attribute> 
        <xsl:attribute name="name">password</xsl:attribute> 
        </xsl:element> 

        <xsl:element name="input"> 
        <xsl:attribute name="type">submit</xsl:attribute> 
        <xsl:attribute name="value">register</xsl:attribute> 
        </xsl:element> 

      </xsl:element> 

MY JS, die für beide

<script> 
function validateform(){ 
var name=document.myform.name.value; 
var password=document.myform.password.value; 
if (name==null || name==""){ 
    alert("Name can't be blank"); 
    return false; 
} 
else if(password.length<6){ 
alert("Password must be at least 6 characters long."); 
return false; 
} 
} 
</script> 

gleichen Es ist ein Fehler in meiner Konsole gibt nach registrieren Anklicken dieser Wert "undefinierter" Can not Eigenschaft lesen".

PS : Ich möchte das erforderliche Attribut nicht verwenden, da es nicht mit dem IE funktioniert und ich nicht mit jQuery arbeiten möchte

Antwort

0

Das sollte funktionieren, aber Sie haben einige Informationen weggelassen.
Wird der Skriptteil auch über xslt generiert? Wie heißt der xslt-Prozessor? Im Browser?

Aber ein Hinweis kann sein, wenn der Skriptteil über xslt und als Beitragsteil Ihrer xslt-Datei generiert wird. Dies ist in ungültigem XML (XSLT). Sie müssen ein beliebiges Zeichen (&, <) umgehen. In Ihrem Fall ändern:

else if(password.length<6){ 

zu

else if(password.length &lt; 6){ 

Update:

Wenn es mehr als ein Formular mit dem gleichen Namen. Ändern Sie Ihre ValidateForm Funktion Form

function validateform(){ 
    var name=document.myform.name.value; 
    //... 
} 

To (Anwendungsform als Parameter):

function validateform(form){ 
    var name= form.elements['name'].value; 
    //... 
} 

Und es verwenden: onsubmit="return validateform(this)"

+0

Das Skript wird nicht über Xslt erzeugt. Das Skript befindet sich in einer separaten JS-Datei und ist in meiner klassischen ASP enthalten. Auch der XSL-Prozessor wird in meinem ASP genannt. –

+0

Ja, das obige passt nicht zu den Protokollmeldungen. Eine weitere Vermutung, das generierte HTML hat eine andere Dokumentdeklaration und der nicht standardmäßige Elementzugriff funktioniert 'document.myform.name' nicht. Versuchen Sie 'document.myform.elements ['name']'. Oder es gibt eine zweite Form myform in Ihrem generierten HTML. Außerdem wäre es besser, 'validateform (this)' zu nennen und dann dieseform.elements ['name'] zu verwenden. –

+0

Danke dafür. Du hast recht. Das Element wird kopiert und jedes Element, das ich erstelle, ist ein Duplikat davon. Aber ich brauche auch die doppelte Kopie. document.myform [1] .name.value arbeitete für mich. Ich brauche nur Hilfe in meinem JS jetzt. Kannst du bitte den Code mit der Funktion validateform (this) {} –