2016-03-27 8 views
0

コードの一部に詰まっています。私はxslを使用しているときにフォームを検証することができません。しかし、同じことがhtmlで動作します。javascriptを使用したxslフォームの検証

本当に奇妙で、私は解決策を知らない。

私のHTMLコードは完璧です。

<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> 

検証し、URLを直接到達していない私のXSLコード。

<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> 

それは未定義の値 ""プロパティを読み取ることができません" という登録をクリックした後、私のコンソールにエラーを与えるの両方

<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> 

でも同じですMY JS。

PS :IEでは動作しないため、jQueryを使用したくないため、必須の属性を使用したくありません。

答えて

0

これはうまくいくはずですが、いくつかの情報が残っています。
スクリプト部分もxslt経由で生成されていますか? xsltプロセッサはどのように呼び出されますか?ブラウザでは?

ただし、スクリプト部分がxsltを介して生成され、xsltファイルの投稿された部分として生成される場合は、1つのヒントがあります。これは有効なXML(XSLT)ではありません。 文字をエスケープする必要があります(&、<)。あなたのケースの変更には :

else if(password.length<6){ 

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

へのアップデート:

同じ名前でもっとして一つの形がある場合。あなたのvalidateform関数型

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

(パラメータとして使用形態)への変更:

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

そして、それを使用します。onsubmit="return validateform(this)"

+0

スクリプトは、XSLTによって生成されていません。スクリプトは別のJSファイルにあり、それは私の古典的なASPに含まれています。また、私のASPでXSLプロセッサが呼び出されます。 –

+0

はい、上記はログメッセージに適合しません。別の推測では、生成されたhtmlには別のドキュメント宣言があり、標準要素でないアクセスは 'document.myform.name'で動作しません。 'document.myform.elements ['name']'を試してみてください。または、生成されたHTMLに2番目のフォームmyformがあります。また、 'validateform(this)'を呼び出して、thisform.elements ['name']を使う方が良いでしょう。 –

+0

ありがとうございます。あなたが正しいです。要素がコピーされて、そこに作成された要素はすべて複製されます。しかし、私は重複したコピーも必要です。 document.myform [1] .name.valueは私のために働いていました。 ちょうど私のJSの助けが必要です。 validateform(this){} –

関連する問題