当前位置:首页 > JavaScript

js 实现placeholder

2026-01-31 16:33:09JavaScript

使用HTML5原生属性实现placeholder

在HTML5中,<input><textarea>元素原生支持placeholder属性,无需JavaScript即可实现占位文本效果:

<input type="text" placeholder="请输入内容">
<textarea placeholder="请输入多行文本"></textarea>

兼容旧浏览器的JavaScript实现

对于不支持HTML5 placeholder的旧浏览器(如IE8及以下),可通过以下JavaScript方案模拟:

function simulatePlaceholder(inputElement) {
  if (!inputElement.placeholder) return;

  const placeholderText = inputElement.placeholder;
  inputElement.value = placeholderText;
  inputElement.setAttribute('data-original-color', inputElement.style.color);
  inputElement.style.color = '#999';

  inputElement.addEventListener('focus', function() {
    if (this.value === placeholderText) {
      this.value = '';
      this.style.color = this.getAttribute('data-original-color') || '';
    }
  });

  inputElement.addEventListener('blur', function() {
    if (this.value === '') {
      this.value = placeholderText;
      this.style.color = '#999';
    }
  });
}

// 对所有input和textarea元素应用
document.querySelectorAll('input, textarea').forEach(simulatePlaceholder);

使用CSS伪类增强样式

现代浏览器支持:placeholder-shown伪类,可单独设置placeholder的样式:

input:placeholder-shown, textarea:placeholder-shown {
  color: #999;
  font-style: italic;
}

/* 兼容前缀 */
input:-moz-placeholder, textarea:-moz-placeholder {
  color: #999;
}
input::-moz-placeholder, textarea::-moz-placeholder {
  color: #999;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
  color: #999;
}

第三方库解决方案

使用现成的polyfill库如jQuery插件或standalone库:

  1. jQuery方案

    $('input, textarea').placeholder();
  2. 独立库placeholder.js

    <script src="placeholder.js"></script>
    <script>
    Placeholder.init();
    </script>

表单验证时的注意事项

提交表单时需要清除模拟的placeholder值:

document.querySelector('form').addEventListener('submit', function() {
  document.querySelectorAll('input, textarea').forEach(function(el) {
    if (el.value === el.placeholder) {
      el.value = '';
    }
  });
});

动态内容处理

对于动态添加的表单元素,需要重新初始化:

js 实现placeholder

function initPlaceholders() {
  document.querySelectorAll('input, textarea').forEach(function(el) {
    if (!el.getAttribute('data-placeholder-bound')) {
      simulatePlaceholder(el);
      el.setAttribute('data-placeholder-bound', 'true');
    }
  });
}

// 监听DOM变化
const observer = new MutationObserver(initPlaceholders);
observer.observe(document.body, { childList: true, subtree: true });

标签: jsplaceholder
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…