使用mouseover的jquery live()无法正常工作

3

你好

这是我的代码

$('.fc-event').live("mouseover",function(){
                                    if (!$(this).data("init")) {
                                        $(this).data("init", true);
                                        $(this).draggable({ 
                                             appendTo: 'body', 
                                             //opacity: 0.65, 
                                             revert: 'invalid', 
                                             scroll: true, 
                                             scrollSpeed: 50 
                                             });
                                        $(this).draggable(
                                            "option",
                                            "helper",
                                            function(){
                                                $('body').append('<div id="dragElement"></div>');
                                                $('#dragElement').maxZIndex({inc : 5});
                                                $('#dragElement').html($(this).find('.fc-event-title').html());
                                                return $('#dragElement'); 
                                            });
                                    }
                                });

这不起作用... :( 如果我将事件更改为“hover”,它将起作用(但仅在鼠标移出时...这是无法使用的)。如果我将事件更改为“click”,它也可以工作,只是不能用于“mouseover”。
有什么想法吗?

你的意思是回调从未被调用吗? 你尝试过用Firebug调试js吗? 这会发生在每个浏览器上吗? - mamoo
1个回答

3
您可能遇到问题是因为mouseover.hover()不同,它也会触发子元素。要获取等效于.hover()的效果,您需要使用mouseenter,它在进入子元素时不会触发,示例代码如下:
$('.fc-event').live("mouseenter",function(){

我希望当你将鼠标悬停在元素上时它能够触发,而不管子元素如何。问题不在于它没有起作用,而是根本没有起作用。假设我使用 $('.fc-event').live("mouseover",function(){ alert("Hello"); }); ,那也不起作用。它似乎根本没有注册鼠标悬停事件,但如果我将事件更改为 hover,则会弹出警报。 - Thomas Clayson
@Thomas - 你的问题之外可能还有其他事情发生了,可能是父元素返回false或停止了传播? mouseover事件本身是有效的,你可以在这里测试:http://jsfiddle.net/nick_craver/DuxmJ/ - Nick Craver
尼克 - 除非我错了,否则 mouseenter 只是被映射到 mouseover。http://github.com/jquery/jquery/blob/master/src/event.js#L934 我认为这是因为要使 .live() 效果起作用,事件 需要 对每个后代元素都触发。 - user113716
@patrick - 这不是要解雇后代,而是要解雇父级。如果他特别使用1.4.2版本,你在重新映射方面是正确的,这直到那时才发生:http://github.com/jquery/jquery/blob/1.4.1/src/event.js#L867 无论如何,问题不在这里,有些外部因素正在起作用。 - Nick Craver
Nick - 你说得没错,这不是 OP 的问题。关于事件触发,我只是想说放置在容器上的 mouseenter(就像 live() 所做的那样)在你进入其子元素时不会触发,因此似乎需要使用 mouseover。不要在这上面浪费时间了,我会更深入地研究它的。 :o) - user113716
@Nick...是fullcalendar for jquery插件阻止我的鼠标悬停。我不确定原因,也无法将其从脚本中删除,但有一个钩子可以在.fc-event div上添加监听器以进行onMouseOver事件。这就是解决办法。感谢你的帮助。 :) - Thomas Clayson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接