当前位置:首页 > 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的样式:

js 实现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方案

    js 实现placeholder

    $('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 = '';
    }
  });
});

动态内容处理

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

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结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…