2

mouseenter要素がイベントに追加される MooTools スクリプトがあります (理由は聞かないでください..) 。jQuery では、fancybox 内でこれらの要素を開いたり表示したりします。ユーザーがどこをクリックしてファンシーボックスを開くかによって、最終的にはカーソルがすでに要素上にあるため、ポップアップが表示されたときに最初に mouseenter イベントが発生することはありません。しかし、jQuery の mousemove イベントはそれらに対して発生します。

mooTools ファイルに mouseenter イベントをトリガーする mousemove イベントを追加することもできますが、学習のために、要素イベント関数を起動するにはどうすればよいでしょうか (そして this-reference を利用するには)? これは私にはうまくいきませんでした。

ムーツール:

$$('.foo').addEvents({
    mouseenter: function(){
        console.log('fired!'); // never does ):
        // stuff happens here
    }
});

jQuery:

$('#bar').fancybox({
    onComplete: function() {
        $('.foo').unbind('mousemove').mousemove(function() {
            var el = this;
            console.log('mousemoved');
            $('.foo').unbind('mousemove');

            // does not work:
            (function($$) {
                $$(this).fireEvent('mouseenter', $(this));
            })(document.id);

            // neither does this:
            var event;
            if (document.createEvent) {
                event = document.createEvent("HTMLEvents");
                event.initEvent("mousemove", true, true);
            } else {
                event = document.createEventObject();
                event.eventType = "mousemove";
            }

            event.eventName = "mousemove";
            event.memo = {};

            if (document.createEvent) {
                this.dispatchEvent(event);
            }
            else {
                this.fireEvent("on" + event.eventType, event);
            }

            // whats the solution?
            // something like: this.fireEvent('mouseenter', this); would be cool!

        });
    }
});
4

1 に答える 1