Я бы переместил свои прежние js-коды в более стильный ООП. Вот код.
function addEvent( obj, type, fn ) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
}
function test() {
}
test.prototype = {
init: function () {
addEvent(document, 'mousedown', this.displaydown);
},
displaydown : function(e){
document.getElementById('mydiv').innerHTML = "down";
addEvent(document, 'mousemove', this.displaymove);
},
displaymove : function(e){
document.getElementById('mydiv').innerHTML = "move";
}
}
var test0 = new test();
test0.init()
Я не мог добавить событие mousemove после mousedown с помощью
addEvent(document, 'mousemove', this.displaymove);
Но если я напишу встроенный стиль, например
addEvent(document, 'mousemove', function(e){
document.getElementById('mydiv').innerHTML = "move";
});
Ничего страшного. Похоже, что 2 кода делают одно и то же. Почему есть разница? Спасибо!
редактировать,
После борьбы в течение 2 ночей я наконец решил проблему. Спасибо johnvey за ваше просвещение.
Ошибка возникает в этом ключевом слове. В случае объекта это относится к окну, а не к самому объекту. Решение заключается в том, что я определил глобальный параметр me (me = this) в начале. Сейчас все хорошо.