2012-10-02 39 views
0

有人能告訴我爲什麼W3C驗證服務說這個代碼無效嗎?W3C驗證服務爲什麼說這是無效的XHTML?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
<title>this is the title of the web page</title> 
</head> 
<body> 

<form action="formscript.php" method="post"> 
    first name:<input type="text" name="firstname" /> 

    <input type="submit" /> 
</form> 

</body> 
</html> 
+1

你能否更新你的問題,並把驗證器給你什麼錯誤? – 2012-10-02 13:39:16

回答

1

我試了這兩個代碼,驗證器說這個問題代碼是有效的XHTML 1.0 Transitional。

無論如何,這裏的問題是您的<form>裏面沒有<fieldset>,並且文本<input>沒有<label>

<form action="formscript.php" method="post" name="thisform"> 
    <fieldset> 
    <label for="firstname">first name:</label> 
    <input type="text" name="firstname" /> 

    <input type="submit" /> 
    </fieldset> 
</form> 

而且別忘了DOCTYPE

+0

'label'元素雖然有用,但與驗證問題無關。 'fieldset'只是可能的塊級別包裝器之一。如果使用,它需要一個「圖例」子元素。在您提出的解決方案中還存在其他標記錯誤(其中一些在原始中不存在),正如您通過嘗試驗證代碼所看到的那樣。 –

+0

Thx,你的權利我沒有把

0

如果在開始時添加了XHTML 1.0 Transitional文檔類型聲明,則原始發佈的標記會生成有效的XHTML 1.0 Transitional文檔。

作爲編輯者@adamjansch,與XHTML 1.0嚴格文檔類型聲明,它是無效的,並可能將其使用文檔類型聲明驗證。然後第一個錯誤信息是「字符數據不允許在這裏」,其中有一些可能的原因的解釋,包括「將文本直接放入文檔主體而不將其包裝到容器元素中(例如<p>aragraph</p>)」。這會變得很緊密:問題在於,在XHTML 1.0 Strict中,form元素可能只有塊級子元素。

這意味着像input任何文本和文本級標記必須被包裹在一個或多個塊的容器,如pdivfieldset,或table。其中,div是唯一中立的,對渲染沒有默認影響:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
<title>this is the title of the web page</title> 
</head> 
<body> 

<form action="formscript.php" method="post"> 
    <div> 
    first name:<input type="text" name="firstname" /> 

    <input type="submit" /> 
    </div> 
</form> 

</body> 
</html>