(二)IE 6-IE 9のinputにHTML 5の新しい属性-placeholderを追加する
11007 ワード
同じように最近出会った小さな問題です.IE 9以下のinputではplaceholder属性はサポートされていないためです.ネットで解決策を見つけて、思い切って持って行きました.魯迅先生が言った「拿来主義」のように、脳髄を運用し、目を出して、自分で取りに来ます.感謝します.花を借りて仏を捧げてここで分かち合うことを記録します.
使い方は簡単で、コードにplaceholderを導入します.js、後のコードを加えればいいです.
ここでplaceholder.jsのソースコードは以下の通りです.
时には、すべてをはっきりさせる必要はありません.必要もありません.自分にとってより適切で意味のある価値のある場所に集中しなければならない.
使い方は簡単で、コードにplaceholderを導入します.js、後のコードを加えればいいです.
1 <script src="jquery-1.11.3.js"></script>
2 <!--IE8-IE6 html5 placeholder -->
3 <script src="placeholder.js"></script>
4 <script>
5 // IE8-IE6 html5 placeholder
6 $(function(){
7 var support = (function(input) {
8 return function(attr) { return attr in input }
9 })(document.createElement('input'))
10 if ( !(support('placeholder') && $.browser.webkit) ) {
11 $('input[placeholder],textarea[placeholder]').placeholder({
12 useNative: false,
13 hideOnFocus: false,
14 style: {
15 textShadow: 'none'
16 }
17 });
18 }
19
20 if ( !support('autofocus') ) {
21 $('input[autofocus]').focus()
22 }
23 });
ここでplaceholder.jsのソースコードは以下の通りです.
1 (function ($) {
2 var attr = 'placeholder', nativeSupported = attr in document.createElement('input')
3
4 $.fn.placeholder = function (options) {
5 return this.each(function () {
6 var $input = $(this)
7
8 if ( typeof options === 'string' ) {
9 options = { text: options }
10 }
11
12 var opt = $.extend({
13 text : '',
14 style : {},
15 namespace: 'placeholder',
16 useNative: true,
17 hideOnFocus: true
18 }, options || {})
19
20 if ( !opt.text ) {
21 opt.text = $input.attr(attr)
22 }
23
24 if (!opt.useNative) {
25 $input.removeAttr(attr)
26 }else if ( nativeSupported ) {
27
28 $input.attr(attr, opt.text)
29 return
30 }
31
32 var width = $input.width(), height = $input.height()
33 var box_style = ['marginTop', 'marginLeft', 'paddingTop', 'paddingLeft', 'paddingRight']
34
35 var show = function () { $layer.show() }
36 var hide = function () { $layer.hide() }
37 var is_empty = function () { return !$input.val() }
38 var check = function () { is_empty() ? show() : hide() }
39
40 var position = function () {
41 var pos = $input.position()
42 if (!opt.hideOnFocus) {
43
44 pos.left += 2
45 }
46 $layer.css(pos)
47 $.each(box_style, function (i, name) {
48 $layer.css(name, $input.css(name))
49 })
50 }
51
52 var layer_style = {
53 color : 'gray',
54 cursor : 'text',
55 textAlign : 'left',
56 position : 'absolute',
57 fontSize : $input.css('fontSize'),
58 fontFamily: $input.css('fontFamily'),
59 display : is_empty() ? 'block' : 'none'
60 }
61
62
63 var layer_props = {
64 text : opt.text,
65 width : width,
66 height: 'auto'
67 }
68
69
70 var ns = '.' + opt.namespace, $layer = $input.data('layer' + ns)
71 if (!$layer) {
72 $input.data('layer' + ns, $layer = $('<div>', layer_props).appendTo($input.offsetParent()) )
73 }
74
75
76 $layer
77 .css($.extend(layer_style, opt.style))
78 .unbind('click' + ns)
79 .bind('click' + ns, function () {
80 opt.hideOnFocus && hide()
81 $input.focus()
82 })
83
84 $input
85 .unbind(ns)
86 .bind('blur' + ns, check)
87
88 if (opt.hideOnFocus) {
89 $input.bind('focus' + ns, hide)
90 }else{
91 $input.bind('keypress keydown' + ns, function(e) {
92 var key = e.keyCode
93 if (e.charCode || (key >= 65 && key <=90)) {
94 hide()
95 }
96 })
97 .bind('keyup' + ns,check)
98 }
99
100 101
102 $input.get(0).onpropertychange = check
103
104 position()
105 check()
106 })
107 }
108
109 })(jQuery)
时には、すべてをはっきりさせる必要はありません.必要もありません.自分にとってより適切で意味のある価値のある場所に集中しなければならない.