RHEventUtil-1.0.js
2.97 KB
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
133
134
135
136
RHEventUtil = function(){} ;
// 이벤트 붙이기
RHEventUtil.attachEvent =
function(oBody,oTarget,eventOfType,handlerOfEvent,fnOfCondition)
{
oTarget = RHEventUtil.safeArray(oTarget) ;
for(var i = 0 ; i < oTarget.length ; i++ ) {
oTargetForCondition = RHEventUtil.getEventObj(oBody,oTarget[i]) ;
if( fnOfCondition == undefined || fnOfCondition.call(oTargetForCondition) == true )
RHEventUtil.attachEventSingle(oBody,oTarget[i],eventOfType,handlerOfEvent) ;
}
}
// obj 를 무조건 array 으로 변환한다. 데이터 타입을 마추기 위해 사용한다.
RHEventUtil.safeArray =
function(obj) {
obj = ( obj == undefined ) ? new Array() : obj ;
// select 객체는 자체 length 메쏘드를 가지고 있다.
if( obj.tagName != undefined && obj.tagName.toLowerCase() == "select" )
{
obj = new Array(obj)
}
else
obj = ( obj.length == undefined ) ? new Array(obj) : obj ;
return obj ;
}
RHEventUtil.wrapEventString =
function(eventOfType)
{
return ( RichFrameworkStatic.isIE == false ) ? eventOfType.substring(2) : eventOfType ;
}
//V1.0 통일된 이벤트 명 리턴 click 등등
RHEventUtil.uniqueEventString =
function(eventOfType)
{
return ( RichFrameworkStatic.isIE == false ) ? eventOfType : eventOfType.substring(2) ;
}
// 이벤트 붙이기 다중 아이디 객체 고려 안함
RHEventUtil.attachEventSingle =
function(oBody,oTarget,eventOfType,handlerOfEvent)
{
// 이벤트 이름 처리
eventOfType = RHEventUtil.wrapEventString(eventOfType) ;
if( oTarget == undefined ) return false ;
if( eventOfType == "onclick" || eventOfType == "click" )
oTarget.style.cursor = "pointer" ;
try
{
// IE
if( jQuery.browser.msie )
oTarget.attachEvent(eventOfType,RHEventUtil.prepareHandler.bind(oBody,eventOfType,handlerOfEvent)) ;
else
oTarget.addEventListener(eventOfType,RHEventUtil.prepareHandler.bind(oBody,eventOfType,handlerOfEvent),false) ;
}
catch (e)
{
WPUtil.log("RHEventUtil.attachEventSingle","",e) ;
}
}
// V1.0 간단 이벤트 발생시의 객체 리턴하기
// 이벤트 걸린 태그가 INPUT 태그이면 RichBaseElement 를 리턴한다.
RHEventUtil.getEventObj =
function(oBody,ele)
{
var rv = null ;
if( ele != null ) {
Object.extend(ele,RichElement) ;
if( ele.isInput() )
{
var rf = oBody.getForm(ele.getFormNm()) ;
rv = rf.getE(ele.getNm()) ;
rv.setOrgEv(ele) ;
}
else
rv = ele ;
}
return rv ;
}
// V1.0 이벤트 걸기 전에 항상 실행되는 핸들러
RHEventUtil.prepareHandler =
function(eventOfType,fn)
{
eventOfType = RHEventUtil.uniqueEventString(eventOfType) ;
this.prepareGlobalHandler() ;
eventOfType = eventOfType.substring(0,1).toUpperCase() + eventOfType.substring(1) ;
obj = RHEventUtil.getEventObj(this,event.srcElement) ;
// 각각에 맞는 이벤트 전처리기 실행
var isContinue = eval("this.prepare" + eventOfType + "Handler").apply(obj,arguments) ;
isContinue = ( isContinue == undefined ) ? true : isContinue ;
// 실제 이벤트 핸들러 실행
if( isContinue )
fn.apply(obj,arguments) ;
}