【问题标题】:jQuery .hover() only working in FireFoxjQuery .hover() 仅适用于 FireFox
【发布时间】:2010-08-28 16:23:03
【问题描述】:

我需要向几个菜单项添加信息弹出窗口,并且我使用 jQuery .hover 来执行此操作。但是,这只适用于 Firefox,不适用于 Safari、Chrome 或 Opera。

var Main = function() {

    //other functions...

    function _setPopups() {
        $(".dt_event_title a").hover(
            function(){
                $(".info_popup",this).css({"display":"block"});
                //$(".info_popup",this).fadeTo("normal",1);
                //$(".info_popup",this).fadeIn("normal");
                //$(this).find(".info_popup").fadeIn("normal");

            },
            function(){
                $(".info_popup",this).css({"display":"none"});
                //$(".info_popup",this).fadeTo("normal",0);
                //$(".info_popup",this).fadeOut("normal");
                //$(this).find(".info_popup").fadeIn("normal");
            }
        );
    }
    return {
        //other methods...
        "setPopups" : function(){ _setPopups(); }
    };
}();
$(document).ready(function(){
    //other method calls...
    Main.setPopups();
});

我的其他方法在上下文中工作,所以我的关闭很好。被注释掉的 jQuery 行代表了我尝试过的产生相同结果的其他转换:适用于 Firefox,但不适用于其他。我不确定我做错了什么。

仅供参考,.info_popup div 被赋予一个 css 样式 display:none 在外部样式表中隐藏它。

任何帮助将不胜感激。

***这里是一些html...注意这代表输出,html主要由php生成

<tr class="dt_event_title">
   <td>
      <a class="dt_event_link" href="...php generated link...">
         <span class="info_icon"></span>
         <span class="event_title">Title of Event</span>
      </a>
      <div class="info_popup">   
         ...some php generated content
      </div>
      <div class="dt_event_date">
          09-15-2010 02:00 pm - 02:00 pm          
      </div>
   </td>
</tr>

好的,这是我的代码的最新重新排列。 HTML 现在看起来像这样:

<tr>
   <td>
      <div class="dt_event_title">
         <a class="dt_event_link" href="php generated link">
            <span class="info_icon"></span>
            <span class="event_title">php generated title</span>
         </a>
         <div class="dt_event_date">php generated date</div>
         <div class="info_popup">
            <div class='popup_title'>php generated title</div>
            <div class='popup_date'>php generated date</div>
            <div class='popup_time'>php generated time</div>
            <div class='popup_arrow'></div>
         </div>
      </div>
   </td>
</tr>

而 javascript 看起来像这样:

var Main = function() {

    function _setPopups() {
        $(".dt_event_title").hover(
            function(){
                $(".info_popup",$(this)).fadeIn("fast");
            },
            function(){
                $(".info_popup",$(this)).fadeOut("fast");
            }
        );
    }
    return {
        "setPopups" : function(){ _setPopups(); }
    };
}();
$(document).ready(function(){
    Main.setPopups();
});

还是同样的问题。

【问题讨论】:

  • 相关的 HTML 是什么样的?具体来说,那些&lt;a&gt; 元素中有什么?特别注意像&lt;div&gt;这样的块级元素不能嵌套在&lt;a&gt;标签中,所以也许这是IE告诉你你的标记无效的方式。
  • 我不知道出了什么问题,只是想让您知道,您可以使用 .show().hide() 而不是做 .css({"display":"none"}).css({"display":"block"}) ,它们完全相同。 :) 如果你不知道,对你来说更容易一些。 jquery 位看起来都很好...我不知道您在 jquery 周围做了什么,但是 jquery 位应该可以工作。也许把它写在花哨的嵌套函数之外,看看它是否有效——至少这样你就知道它是 jquery 还是 javascript。
  • 我的 a 标签中确实有块级元素,但是即使在重组之后没有 div 标签,行为仍然是一样的......而且要清楚,它不是 IE问题。 Firefox 以外的其他浏览器都无法使用。
  • 感谢您的建议,托马斯。我也尝试过 show() 和 hide() (我尝试了几个选项)。我还将代码放在我的闭包之外进行检查。两者都给出了相同的结果。
  • 能否包含相关的 HTML,特别是菜单和弹出窗口?

标签: javascript jquery firefox hover


【解决方案1】:

(已编辑以使用您的 html)

由于您要指定选择器上下文(将 ,this 添加到您的选择器),.info_popup 元素必须在 inside this 元素中。注意 info_popup div 是如何在 a 元素内的。 我不确定这就是你想要的,但它与你的代码匹配。 由于你的 info_popup 在 a 元素之外,所以使用 $(this).parent() 作为你的选择器。

我把这个扔进了jsFiddle 给你。我在 Chrome 中使用它并且它有效。

下面还有代码:

HTML

<table>
<tr class="dt_event_title">
   <td>
      <a class="dt_event_link" href="...php generated link...">
         <span class="info_icon"></span>
         <span class="event_title">Title of Event</span>
      </a>
      <div class="info_popup">   
         ...some php generated content
      </div>
      <div class="dt_event_date">
          09-15-2010 02:00 pm - 02:00 pm          
      </div>
   </td>
</tr>
</table>​

CSS

.info_popup { display:none; }​

JS

var Main = function() {

    //other functions...
    function _setPopups() {
        $(".dt_event_title a").hover(
            function(){
                $(".info_popup",$(this).parent()).show(); //switched to .show() and $(this).parent()
                //$(".info_popup",this).fadeTo("normal",1);
                //$(".info_popup",this).fadeIn("normal");
                //$(this).find(".info_popup").fadeIn("normal");

            },
            function(){
                $(".info_popup",$(this).parent()).hide(); //switched to .hide() and $(this).parent()
                //$(".info_popup",this).fadeTo("normal",0);
                //$(".info_popup",this).fadeOut("normal");
                //$(this).find(".info_popup").fadeIn("normal");
            }
        );
    }
    return {
        //other methods...
        "setPopups" : function(){ _setPopups(); }
    };
}();
$(document).ready(function(){
    //other method calls...
    Main.setPopups();
});​

【讨论】:

  • 谢谢。我已经尝试了您的建议,但结果仍然相同。我尝试了许多不同的选择方法,除了 Firefox 之外似乎没有其他方法可以工作......我要疯了
  • @Logic,我发布的使用您的 html 摘录的 jsFiddle 是否适合您?
  • 所以要么你的 html 要么你的 js 有区别。有没有查看控制台查找 js 错误?
  • 我已经通过 jslint 运行它,并通过 firebug 控制台和 chrome 的控制台查看了它...没有 js 错误。
  • 您完全确定相关部分与 jsFiddle 相同吗?这是一个可以链接到的面向公众的页面吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2013-04-11
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多