【发布时间】:2015-02-05 20:42:24
【问题描述】:
我使用Placeholders.js 作为占位符填充,除了在 Opera Mini 中工作正常,我猜是因为它是代理浏览器。有人有 Opera Mini 的占位符 polyfill 吗?
【问题讨论】:
标签: placeholder polyfills opera-mini
我使用Placeholders.js 作为占位符填充,除了在 Opera Mini 中工作正常,我猜是因为它是代理浏览器。有人有 Opera Mini 的占位符 polyfill 吗?
【问题讨论】:
标签: placeholder polyfills opera-mini
Opera Mini supports onfocus 和 onblur 事件。因此,您可以添加处理程序以在 focus 事件上隐藏占位符并在 blur 事件上显示(简单案例)。
我对 iOS Opera Mini 和 Android Opera Mini(最新版本)的测试表明,仅当您在设备键盘上按下 done 时,占位符 polyfill 才能正常工作,例如文档中的 this video。如果您在键盘外点击,文本输入将失去焦点,但不会触发模糊处理程序。也不是,这种行为是真实的,因为 Opera Mini 渲染不在您的设备上运行。更多信息here.
我的test code,我创建了一个带有 2 个文本输入的表单,并将第一个输入处理程序添加到属性。对于第二个输入,我使用 addEventListener 添加处理程序。
HTML:
<form action="">
<input type=text value="Аttributes handler" onfocus="(this.value === 'Аttributes handler') && (this.value = '')" onblur="(this.value === '') && (this.value = 'Аttributes handler')">
<br><br>
<input type=text value="" data-placeholder="Listener handler">
</form>
Javascript:
document.addEventListener('DOMContentLoaded', function () {
var listenerInputNode = document.querySelector('input:last-child'),
placeholderText = listenerInputNode.getAttribute('data-placeholder');
(listenerInputNode.value === '') && (listenerInputNode.value = placeholderText);
listenerInputNode.addEventListener('focus', function () {
(this.value === placeholderText) && (this.value = '');
}, false);
listenerInputNode.addEventListener('blur', function () {
(this.value === '') && (this.value = placeholderText);
}, false);
});
所以我认为 Opera Mini 中确实有用于占位符的 polyfill,但是 focus/blur 事件真的不会像您期望的那样触发。
【讨论】:
设法通过一些 UA 嗅探来检测 Opera Mini 并使用 if 语句隐藏/显示标签来解决这个问题。如果有人觉得有用,可以发布代码。
【讨论】: