2016-03-27 186 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> 

不驗證和直接我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> 

MY JS這兩者相同

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

它點擊註冊一個「無法讀取屬性 」的不定值「 後給出了我的控制檯錯誤。

PS :我不想使用必需的屬性,因爲它不適用於IE,我不想使用jQuery。

回答

0

這應該可以工作,但是你遺漏了一些信息。
腳本部分是否也通過xslt生成?如何調用xslt處理器?在瀏覽器中?

但是一個提示可能是,如果腳本部分是通過xslt生成的並且是您的xslt文件的發佈部分。這在無效的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。另外XSL處理器在我的asp中調用。 –

+0

是的,上面的內容不適合日誌消息。另一種猜測是,生成的html具有不同的文檔聲明,不符合標準的元素訪問'document.myform.name'不起作用。試試'document.myform.elements ['name']'。或者在生成的html中有第二種形式myform。另外最好調用'validateform(this)',然後使用thisform.elements ['name']。 –

+0

謝謝你。你是對的。該元素正在被複制,並且我創建的任何元素都有一個重複的元素。但我也需要複製副本。 document.myform [1] .name.value爲我工作。 只是我現在需要幫助我的JS。你可以用函數validateform(this)發佈代碼嗎?{} –