曾經遇到這樣一個問題,處理IE8密碼框placeholder屬性相容性。幾經周折,這個方案是可以解決問題的。 1、jsp頁面引入js插件 2、頁面初始化代碼 3、頁面標簽代碼 4、插件placeholder.js 5、GAME OVER ...
曾經遇到這樣一個問題,處理IE8密碼框placeholder屬性相容性。幾經周折,這個方案是可以解決問題的。
1、jsp頁面引入js插件
<script type="text/javascript" src="<%=basePath%>/login.js" ></script>
2、頁面初始化代碼
<script type="text/javascript"> //input提示信息 效果插件 針對ie8處理 $(function() { if(!('placeholder' in document.createElement('input'))){ $('#password').placeholder({isUseSpan:true}); } }); </script>
3、頁面標簽代碼
<input id="password" name="j_password" class="input_text input_open" placeholder="請輸入密碼" type="password" >
4、插件placeholder.js
/** * jQuery EnPlaceholder plug * 跨瀏覽器實現placeholder效果的jQuery插件 * version 1.0 * } */ // // var defaultValue = "賬號"; (function ($) { $.fn.extend({ "placeholder":function (options) { options = $.extend({ placeholderColor:'#BABABA', //#ACA899 isUseSpan:false, //是否使用插入span標簽模擬placeholder的方式,預設false,預設使用value模擬 onInput:true //使用標簽模擬(isUseSpan為true)時,是否綁定onInput事件取代focus/blur事件 }, options); $(this).each(function () { var _this = this; var supportPlaceholder = 'placeholder' in document.createElement('input'); if (!supportPlaceholder) { var defaultValue = $(_this).attr('placeholder'); //修正無placeholder時,顯示undefined問題 if(defaultValue != null && typeof(defaultValue) != "undefined"){ var defaultColor = $(_this).css('color'); if (options.isUseSpan == false) { $(_this).focus(function () { var pattern = new RegExp("^" + defaultValue + "$|^$"); pattern.test($(_this).val()) && $(_this).val('').css('color', defaultColor); }).blur(function () { if ($(_this).val() == defaultValue) { $(_this).css('color', defaultColor); } else if ($(_this).val().length == 0) { $(_this).val(defaultValue).css('color', options.placeholderColor); } }).trigger('blur'); } else { var $imitate = $('<span class="wrap-placeholder" style="position:absolute; left:85px; display:inline-block; overflow:hidden; color:'+options.placeholderColor+'; width:'+$(_this).outerWidth()+'px; height:'+$(_this).outerHeight()+'px;">' + defaultValue + '</span>'); $imitate.css({ 'margin-left':$(_this).css('margin-left'), 'margin-top':$(_this).css('margin-top'), 'font-size':$(_this).css('font-size'), 'font-family':$(_this).css('font-family'), 'font-weight':$(_this).css('font-weight'), 'padding-left':parseInt($(_this).css('padding-left')) + 2 + 'px', 'line-height':_this.nodeName.toLowerCase() == 'textarea' ? $(_this).css('line-weight') : $(_this).outerHeight() + 'px', 'padding-top':_this.nodeName.toLowerCase() == 'textarea' ? parseInt($(_this).css('padding-top')) + 2 : 0 }); $(_this).before($imitate.click(function () { $(_this).trigger('focus'); })); $(_this).val().length != 0 && $imitate.hide(); if (options.onInput) { //綁定oninput/onpropertychange事件 var inputChangeEvent = typeof(_this.oninput) == 'object' ? 'input' : 'propertychange'; $(_this).bind(inputChangeEvent, function () { $imitate[0].style.display = $(_this).val().length != 0 ? 'none' : 'inline-block'; }); } else { $(_this).focus(function () { $imitate.hide(); }).blur(function () { /^$/.test($(_this).val()) && $imitate.show(); }); } } } } }); return this; } }); })(jQuery);
5、GAME OVER