用.hoverIntent替换MouseOver

时间:2010-02-10 20:26:01

标签: javascript jquery debugging internet-explorer-7 hoverintent

首先我道歉...我之前发过这个问题,但是我解释得不好。我在将hoverIntent插入以下JavaScript时遇到问题...我需要它来替换下面的mouseentermouseleave函数。为了清楚起见,我正在寻求帮助,因为我对JavaScript语法不是很了解。下面的第二个代码片段似乎应该可以工作,但它什么都不做,似乎在Internet Explorer中完全死了。

if (jQuery.browser.msie === true) {
  jQuery('#top_mailing')
    .bind("mouseenter",function(){
      $("#top_mailing_hidden").stop().slideDown('slow');
    })
    .bind("mouseleave",function(){
      $("#top_mailing_hidden").stop().slideUp('slow');
    });
}

我正在将以下内容用于其他浏览器,但它在Internet Explorer中无法正常运行。

$('#top_mailing').hoverIntent(
  function () {
    $("#top_mailing_hidden").stop().slideDown('slow');
  }, 
  function () {
    $("#top_mailing_hidden").stop().slideUp('slow');
  }
);

1 个答案:

答案 0 :(得分:3)

我想我发现了问题。

您正在拨打$('#top_mailing').hoverIntent(...两次。一旦位于hoverintent_r5.js文件的底部,一次位于custom.js文件中。显然IE不喜欢这样。摆脱其中一个,它应该没问题。

将所有代码保存在自己的js文件中可能更好。否则很容易忘记。

编辑:避免stop()问题。

我更喜欢动画:

$('#top_mailing').hoverIntent(
  function () {
    $("#top_mailing_hidden").stop().animate({height:150},'slow');
  }, 
  function () {
    $("#top_mailing_hidden").stop().animate({height:0},'slow');
  }
);

这样,当你需要停下来并改变方向时,它总会知道去哪里。 (上例中为0和150.)

请注意,这需要top_mailing_hidden设置clip:auto; overflow:hidden

由于您正在使用hoverIntent,因此可能不需要调用stop(),因为hoverIntent旨在避免那些意外的鼠标悬停事件。

稍微偏离主题:

在实施过程中记住一件事。由于这是一个填写的表单,用户可能(甚至没有想到)在开始键入时将鼠标移开。这将导致表格消失。

考虑到这一点,您可能需要重新考虑执行mouseout事件。当用户提交表单时,您可以随时将其向上滑动,并带有可选的“取消”或“关闭”按钮。