2012-12-16 80 views
0

我正在用HTML製作一個註冊頁面。我使用placeholder進行輸入,但我知道某些主流瀏覽器(IE < 9,Firefox < 3.7,Chrome/Safari < 4.0)不支持此HTML5功能。如何在表中備份?

我退卻了placeholder喜歡的方式是這樣的代碼,它不需要任何的Modernizr或其他JavaScript:

<audio>Username: </audio> 
<!-- Fallback; won't be displayed by HTML5 browsers --> 
<input type="text" placeholder="Username"> 
<!-- The placeholder will just be ignored by non-HTML5 browsers--> 

的問題是,這張登記表是到一個表,並fallbacking不工作 - 它也顯示後備文本:

<table> 
<tr> 
    <audio> 
     <td> 
      Username: 
     </td> 
    </audio> 
    <td> 
     <input type="text" name="Username" placeholder="Username"> 
    </td> 
</tr> 
</table> 

那麼,我應該如何做後備?我知道Modernizr和其他JS庫,但由於我的服務器上傳速度較慢,並且作爲一般準則,我寧願避開它們。 此外,我沒有考慮使用<td><audio>Fallback</audio></td>由於圖形問題的問題(增加了水平的空白空間,也可能給td造型帶來問題)。

回答

2

如果您有任何輸入字段的顯式標籤,建議您使用可訪問性和可用性,則不需要任何回退。

依賴於瀏覽器支持audio元素的假設,當且僅當它支持placeholder屬性時,這將是相當奇怪的。例如,IE 9支持audio,但不支持placeholder

一個更合理的方法(當支持placeholder,這是恕我直言的一個非問題時刪除標籤)是添加一段JavaScript,檢查placeholder是否被識別爲屬性,如果是,則刪除該標籤。這樣做的風險在於,瀏覽器可能會在不實際支持的情況下識別該屬性。最安全的方式似乎是在JavaScript中創建一個input元素,並檢查該對象是否具有placeholder屬性:

<table> 
<tr id="row"> 
     <td id="label"> 
      <label for="username">Username:</label> 
     </td> 
    <td> 
     <input type="text" name="Username" placeholder="Username" id="username"> 
    </td> 
</tr> 
</table> 
<script> 
if(!('placeholder' in document.createElement('input'))) { 
    document.getElementById('row').removeChild(document.getElementById('label')); 
} 
</script>