【问题标题】:jquery live() with mouseover not working鼠标悬停的jquery live()不起作用
【发布时间】:2011-04-06 18:34:11
【问题描述】:

你好

这是我的代码

$('.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'); 
                                            });
                                    }
                                });

这不起作用... :(如果我将事件更改为“悬停”,它将起作用(但仅在鼠标悬停时...我无法使用)。如果我将事件更改为“单击”它也有效,只是不能“鼠标悬停”。

有什么想法吗?

【问题讨论】:

  • 你的意思是回调永远不会被调用?你试过用 Firebug 调试 js 吗?每个浏览器都会出现这种情况吗?

标签: jquery live mouseover


【解决方案1】:

您可能会遇到问题,因为 mouseover 不是 .hover() 使用的,它也会触发儿童。要获得 .hover() 等效项,您需要 mouseenter 在进入孩子时不会触发,如下所示:

$('.fc-event').live("mouseenter",function(){

【讨论】:

  • 我希望它在您将鼠标悬停在元素上时触发,而不考虑子元素。问题不在于它不工作,它根本不工作。假设我使用 $('.fc-event').live("mouseover",function(){ alert("Hello"); }); 也不起作用。它似乎根本没有注册鼠标悬停事件,而如果我将事件更改为悬停,它会发出警报。
  • @Thomas - 你的问题之外还有其他事情,可能是父母返回错误或停止传播? mouseover 事件本身有效,您可以在这里测试:jsfiddle.net/nick_craver/DuxmJ
  • Nick - 除非我弄错了,否则mouseenter 无论如何都会映射到mouseovergithub.com/jquery/jquery/blob/master/src/event.js#L934 我认为这是因为要使 .live() 效果起作用,事件需要为每个后代元素触发。
  • @patrick - 这不是解雇后代,而是解雇父母。如果他专门使用 1.4.2,那么您在重映射上是正确的,直到那时才发生这种情况:github.com/jquery/jquery/blob/1.4.1/src/event.js#L867 无论如何,问题不在这里,有一些外部原因。
  • 尼克 - 你是对的,不是 OP 的问题。关于事件触发,我的意思是当你 mouseenter 它的孩子时,放置在容器上的 mouseenter (就像 live() 一样)不会触发,所以看起来需要 mouseover 代替.不要花时间在上面。我会更多地研究它。 :o)
猜你喜欢
  • 2013-05-11
  • 2015-08-08
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2015-04-04
相关资源
最近更新 更多