Сообщение от 12345678
|
В хромой или в старой?
|
Opera 30.0...
Вот работает добавление и удаление...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
Event = (function() {
var guid = 0
function fixEvent(event) {
event = event || window.event
if ( event.isFixed ) {
return event
}
event.isFixed = true
event.preventDefault = event.preventDefault || function(){this.returnValue = false}
event.stopPropagation = event.stopPropagaton || function(){this.cancelBubble = true}
if (!event.target) {
event.target = event.srcElement
}
if (!event.relatedTarget && event.fromElement) {
event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
}
if ( event.pageX == null && event.clientX != null ) {
var html = document.documentElement, body = document.body;
event.pageX = event.clientX + (html && html.scrollLeft || body && body.scrollLeft || 0) - (html.clientLeft || 0);
event.pageY = event.clientY + (html && html.scrollTop || body && body.scrollTop || 0) - (html.clientTop || 0);
}
if ( !event.which && event.button ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
return event
}
/* Вызывается в контексте элемента всегда this = element */
function commonHandle(event) {
event = fixEvent(event)
var handlers = this.events[event.type]
for ( var g in handlers ) {
var handler = handlers[g]
var ret = handler.call(this, event)
if ( ret === false ) {
event.preventDefault()
event.stopPropagation()
}
}
}
return {
add: function(elem, type, handler) {
if (elem.setInterval && ( elem != window && !elem.frameElement ) ) {
elem = window;
}
if (!handler.guid) {
handler.guid = ++guid
}
if (!elem.events) {
elem.events = {}
elem.handle = function(event) {
if (typeof Event !== "undefined") {
return commonHandle.call(elem, event)
}
}
}
if (!elem.events[type]) {
elem.events[type] = {}
if (elem.addEventListener)
elem.addEventListener(type, elem.handle, false)
else if (elem.attachEvent)
elem.attachEvent("on" + type, elem.handle)
}
elem.events[type][handler.guid] = handler
},
remove: function(elem, type, handler) {
var handlers = elem.events && elem.events[type]
if (!handlers) return
delete handlers[handler.guid]
for(var any in handlers) return
if (elem.removeEventListener)
elem.removeEventListener(type, elem.handle, false)
else if (elem.detachEvent)
elem.detachEvent("on" + type, elem.handle)
delete elem.events[type]
for (var any in elem.events) return
try {
delete elem.handle
delete elem.events
} catch(e) { // IE
elem.removeAttribute("handle")
elem.removeAttribute("events")
}
}
}
}())
</script>
</head>
<body>
<button id='test'>Test</button>
<button id='del'>Delete</button>
<script>
var obj=document.getElementById('test');
Event.add(obj, 'click', test);
obj=document.getElementById('del');
Event.add(obj, 'click', del);
function test() {
alert('Ok');
};
function del() {
var obj=document.getElementById('test');
Event.remove(obj, 'click', test);
alert('Del!');
};
</script>
</body>
</html>