【问题标题】:jQuery plugin: ":hover" doesnt work in IE8jQuery 插件:":hover" 在 IE8 中不起作用
【发布时间】:2012-10-23 20:07:32
【问题描述】:

我编写了一个 jQuery 插件,它可以让元素产生脉冲。它在 Chrome 和 Internet Explorer 9 中运行良好。在 Internet Explorer 8 中,在 setTimeout 调用后无法运行。

我创建了一个 jsFiddle 来演示这个问题:http://jsfiddle.net/Guykp/ 这是javascript代码:

$(document).ready(function() {
  $.fn.pulseEffect = function(delay, duration) {
    var $element, animateOptions;
    $element = $(this);
    if (!$element.is(":hover")) {
      animateOptions = {
        opacity: $element.css("opacity") === "1" ? .6 : 1
      };
      $element.animate(animateOptions, duration);
    }
    return setTimeout((function() {
      return $element.pulseEffect(delay, duration);
    }), delay + duration);
  };

  $("#pulse-element").pulseEffect(0, 1000);
});

如何让它在 Internet Explorer 8 中运行?

这是来自 Internet Explorer 8 的错误消息:语法错误,无法识别的表达式:不支持的伪:悬停

这是解决方案: How do I check if the mouse is over an element in jQuery?

【问题讨论】:

  • 你不能从setTimeout中的函数返回值。
  • 我知道,但是代码是使用 CoffeeScript 编写的。 CoffeeScript 返回每个函数中的最后一条语句。不过谢谢! :-)
  • 您的代码存在许多问题。首先,setTimeout 只返回 TimeoutHandle。其次,每个人都知道:hover 不能很好地与网络浏览器配合使用。而不是return setTimeout(...); 写成setTimeout(...); return $this;
  • @RocketHazmat $('a').pulseEffect().click(); // error, null not an object

标签: javascript jquery


【解决方案1】:

jQuery 不再有:hover 选择器。一些浏览器原生支持:hover,但其他浏览器不支持。 jQuery 曾经使用它的 CSS 引擎 Sizzle 来实现这一点,但现在不再使用了。

尝试使用hover(或mouseenter/mouseleave)事件。

【讨论】:

    【解决方案2】:

    好像

    $('li:hover).css('display', 'block'); 等价于$().css('display', 'block');

    就像 Rocket Hazmat 所说的使用 jquery hover

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2011-09-03
      相关资源
      最近更新 更多