
最近刚做完公司的WEB MVP 开发框架.累得脑子快要抽筋了,可是即使要抽筋了,也得继续上啊...谁叫俺是打工仔呢.
现在研究的重点转移到了客户端,于是开始钻研起dojo,prototype,yui......
发现javascript也在OO呢(虽然只是同vb一样基于对象的)~~~呵呵
以前只会找要的js代码,然后改啊改啊...从来没有认真的学习过,这次决定好好学学这个Web开发必不可少的东东...
好了废话不扯了,这次的任务就是做Title的自定义显示.
我想IE的Tip显示方式,肯定大家都不满意吧.每一天有多少人在做着自己的自定义显示.
俺可没有那么多精力,先是从网络上找找到了一个老外的程序 qTip: http://solardreamstudios.com/_img/learn/css/qtip/qTip.html
仔细看了看代码,发现几个问题:
1.这个老外只做了一半,它只对单个Tag的所有元素集合进行自定义显示
1
var
qTipTag
=
"
a
"
;
//
Which tag do you want to qTip-ize? Keep it lowercase!//

2.循环出来每个挂载mouse事件
1
var
anchors
=
document.getElementsByTagName (qTipTag);
2
3
for
(
var
i
=
0
; i
<
anchors.length; i
++
)
{
4
//
.
5
}

2

3



4


5

3.Event采用赋值形式
1
a.onmouseover
=
function
()
{tooltip.show(this.getAttribute('tiptitle'))}
;
2
a.onmouseout
=
function
()
{tooltip.hide()}
;
3



2



3

OK.针对这些问题,我们开始我们的重构之旅
1.首先,我希望页面控件的所有Tag只要有Title的,我都要采用自定义显示,这时想到一个最土的招就是

2.它的实现方式是循环找到所有的有标记的Tag,然后设置mouse事件.
这一步我觉得有2个问题:
a.每个tag都设置mouse的事件,显然页面变大了,特别是我现在要求所有的Tag都要自定义显示
b.Event采用赋值.......寒一个
我的思路是使用事件的串连机制,把mouse的事件直接挂载到document上面,然后进行冒泡处理(我不知道这样的效率实际上是更好呢,还是更坏,自我感觉应该会好些吧?:))
1
document.attachEvent(
"
onmouseover
"
,
function
(e)
2
{
3
if(typeof(event)=="undefined")
{
4
sTitle = e.target.getAttribute("title")
5
e.target.removeAttribute("title");
6
}else
{
7
e = event;
8
sTitle = e.srcElement.title;
9
e.srcElement.title = "";
10
};
11
12
if(!sTitle == "")
13
{
14
tooltip.show(sTitle);
15
}
16
}
17
);
18
19
document.attachEvent('onmouseout',
function
(e)
20
{
21
22
if(typeof(event)=="undefined")
{
23
e.target.setAttribute("title",sTitle);
24
}else
{
25
e = event;
26
e.srcElement.title = sTitle;
27
};
28
29
tooltip.hide();
30
31
}
32
);
33

2



3



4

5

6



7

8

9

10

11

12

13



14

15

16

17

18

19

20



21

22



23

24



25

26

27

28

29

30

31

32

33

当然这里或许会碰到的所谓的IE 内存泄漏,因为没有detachEvent.(本来想使用Event.observer的,不过prototype还不谈熟,加上脑子也晕乎乎了,留待下次重构吧)...

看来好像只支持IE哦....还是对少数的其他Fans支持一下吧,修改一下系统方法,让它适当兼容一下其他浏览器
1
if
(
!
document.attachEvent)
//
Not IE
2
{
3
document.attachEvent = function()
{document.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
4
}
5
6
if
(
!
window.attachEvent)
//
Not IE
7
{
8
window.attachEvent = function()
{window.addEventListener(arguments[0].substr(2),arguments[1],arguments[2])}
9
}
10

2



3



4

5

6

7



8



9

10

这样子,大概qTip的功能就重构结束了...
当然还有很多可以改进的地方,比如把提示用的层设计得漂亮一点...









重构后的源文件(在需要的页面link这2个文件就好了):


1

2



3

4

5



6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21



22



23

24

25

26



27



28

29

30

31

32

33

34



35

36

37

38

39

40

41



42

43



44

45

46



47

48

49

50

51

52

53

54



55



56

57

58

59

60

61



62



63

64

65



66

67

68

69

70

71

72



73

74

75

76

77

78

79

80



81

82



83

84



85

86

87

88

89

90

91

92

93

94

95

96



97

98

99



100

101

102

103

104

105



106

107

108

109

110

111

112

113



114

115

116

117

118

119



120

121

122

123

124

125

126



127

128

129

130

131

132



1



2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

javascript控制TEXTBOX长度
< SCRIPT language =javascript1.3 >
















































