当前位置:首页 > 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防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…