私は以前のjsコードをよりOOPスタイルに移行しました。ここにコードがあります。mousedownの後にmousemoveイベントをプロトタイプに追加できないのはなぜですか?
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()
私は
addEvent(document, 'mousemove', this.displaymove);
でマウスダウンした後のMouseMoveイベントを追加することができませんでした。しかし、私は
addEvent(document, 'mousemove', function(e){
document.getElementById('mydiv').innerHTML = "move";
});
のようにインラインスタイルを記述する場合、それはOKです。それは2つのコードが同じことをするように見えます。なぜ違いがありますか?ありがとう!
編集、
は2泊のための闘争の後、私は最終的に問題を解決しました。あなたのenlightingのために感謝johnvey。
このエラーはにあります。このというキーワードです。オブジェクトの場合、これはオブジェクト自体ではなくウィンドウを指します。解決策は、最初にグローバルパラメータ私(私= this)を定義しました。今は大丈夫です。
こんにちは、johnvey ありがとう!私は2番目の方法として行う必要があると思います。このステップでエラーが発生します。私はIE.6を使用しています。これが理由ですか? – unigogo
IE6は問題ではありません。あなたが得ているエラーは何ですか? 大きな質問として、あなたは何をしようとしていますか?別のイベントハンドラの内部からaddEvent()を呼び出すことは、同じハンドラを何度も何度も繰り返してしまうため、うまくいきません。 – johnvey
johnvey、 最終的に、あなたのコードでエラーが見つかりました。 addEvent(document、 'mousedown'、this.displaydown);縛られるべきである。またはmousedownの範囲内のこれはウィンドウです。私はちょうど簡単に読み込むためにスライダに取り組んだ。 http://www.pagecolumn.com/webparts/sliders.htm – unigogo