placeholder 屬性在 IE9 及以下版本不被支援。要實現類似的功能,你需要使用 JavaScript polyfill 或其他變通方法。以下是一些常見的解決方案:
1. 使用 JavaScript polyfill:
這是最推薦的解決方案,因為它可以提供與現代瀏覽器一致的使用者體驗。你可以使用現成的 polyfill 庫,例如:
-
Placeholders.js: 這是一個輕量級的、專門用於 placeholder polyfill 的庫。它會自動檢測瀏覽器是否支援 placeholder,並在不支援的情況下使用 JavaScript 模擬。 你可以從 GitHub 或 CDN 引入它。
<!--[if lt IE 10]> <script src="https://cdn.jsdelivr.net/npm/placeholders.js@1.0.0/dist/placeholders.min.js"></script> <![endif]-->
-
Modernizr: 這是一個更全面的功能檢測庫,也包含了 placeholder 的 polyfill。如果你需要檢測其他 HTML5/CSS3 特性,Modernizr 是一個不錯的選擇。
if (!Modernizr.input.placeholder) { // 使用 JavaScript polyfill Placeholders.init(); // 或者其他 polyfill 方法 }
2. 使用 jQuery 外掛:
如果你已經在使用 jQuery,可以考慮使用 jQuery 外掛來實現 placeholder 功能。網上有很多這樣的外掛可供選擇。
3. 手動實現 JavaScript 解決方案:
你也可以自己編寫 JavaScript 程式碼來實現 placeholder 功能。基本思路是:
- 當 input 獲取焦點時,如果它的值等於 placeholder 文字,則清空值。
- 當 input 失去焦點時,如果它的值為空,則設定值為 placeholder 文字。
var inputs = document.querySelectorAll('input[placeholder]');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
var placeholder = input.getAttribute('placeholder');
input.value = placeholder;
input.style.color = '#aaa'; // 設定 placeholder 文字顏色
input.addEventListener('focus', function() {
if (this.value === this.getAttribute('placeholder')) {
this.value = '';
this.style.color = '#000'; // 恢復正常文字顏色
}
});
input.addEventListener('blur', function() {
if (this.value === '') {
this.value = this.getAttribute('placeholder');
this.style.color = '#aaa'; // 設定 placeholder 文字顏色
}
});
}
4. 使用 label 元素:
這是一種比較簡單的解決方案,但使用者體驗不如 polyfill。你可以將 label 元素放置在 input 元素上方,並使用 CSS 樣式來模擬 placeholder 的效果。
選擇哪種方案?
使用 Placeholders.js 或類似的輕量級 polyfill 是最簡單、最有效的解決方案。 如果你已經使用了 Modernizr 或 jQuery,可以考慮使用它們提供的相關功能。 手動實現 JavaScript 解決方案比較複雜,除非你有特殊需求,否則不推薦。 使用 label 元素的方案使用者體驗較差,只適合對相容性要求非常低的場景。
記住,無論你選擇哪種方案,都要在 IE9 及以下版本進行測試,以確保 placeholder 功能正常工作。