我有一个MooTools脚本(请不要问为什么..)其中元素添加了mouseenter
个事件。在jQuery中,我在fancybox中打开/显示这些元素。当它弹出时,mouseenter事件不会被激活,因为光标最终已经在元素上,这取决于用户点击打开fancybox的位置。但jQuery mousemove事件确实触发了这些事件。
我可以在MooTools文件中添加一个mousemove事件来触发mouseenter事件,但为了学习:我将如何触发元素事件函数(并使用this-reference)?< /强> This didnt work for me.
MooTools的:
$$('.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!
});
}
});
答案 0 :(得分:4)
只需访问您的jQuery元素,然后从fireEvent
Element.prototype
// does not work:
(function($$) {
$$(this).fireEvent('mouseenter', $(this));
})(document.id);
为:
$(this)[0].fireEvent('mouseenter' /* optional event obj, { target: $(this)[0] } */);
// or as @Sergio suggests -
this.fireEvent('mouseenter'); // this == element anyway