收到一个新需求,要改一个jsp项目的登录页,看了下设计图,感觉还好,要求兼容到IE8,,,也还好,基本是做出来了,到最后还剩一个placeholder的问题,网上查了一些方法,再结合自己的理解写了一下。
基本思路就是:
用户名和密码框后面分别放一个 span,作为假的 placeholder 占位,document.ready 的时候,判断浏览器是否支持placeholder,判断之后发现:IE9 和 IE8 不支持,但是 IE8 还能取到 placeholder 这个属性,就加了两个限定条件
至于添加了屏蔽 tab 键的逻辑,是因为发现整个做完都很好,但是我习惯性用 tab 键切换登录页输入框,就出现了 placeholder 没有隐藏掉。
var ua = navigator.userAgent.toLowerCase();
var isIE = ua.indexOf("msie")>-1;
var safariVersion;
if(isIE){
safariVersion = ua.match(/msie ([\d.]+)/)[1];
}
if(!document.getElementById('person.loginId').placeholder || safariVersion=='8.0') { // IE,没有placeholder
$('.user input').next().text('请输入用户名');
$('.pwd input').next().text('请输入密码');
$('body').on('keydown', function(){
if (event.keyCode == 9) { // 禁掉tab键——tab键会导致模仿placeholder失效
return false; //非常重要
}
})
/* IE8 IE9不支持placeholder,模仿实现placeholder */
$('.user').click(function(){
$('.user input').next().hide();
$('.user input').focus();
})
$('.pwd').click(function(){
$('.pwd input').next().hide();
$('.pwd input').focus();
})
$('.user input').blur(function(e){
var value = e.currentTarget.value;
if(!value) {
$('.user input').next().show();
}
})
$('.pwd input').blur(function(e){
var value = e.currentTarget.value;
if(!value) {
$('.pwd input').next().show();
}
})
}