【问题标题】:Help with attr, mouseenter, and mouseout not functioning correctly帮助 attr、mouseenter 和 mouseout 无法正常工作
【发布时间】:2011-08-24 07:35:18
【问题描述】:

我无法获取 attr 函数来更改类并保留它直到下一次单击。它也不会使用新的 mouseenter 和 mouseout 函数。任何想法我做错了什么?

HTML

<a href="" id="play" class="pause"><div id="playctrl"><img id="pausectrl" class="play" src="images/play1.png" ></div></a>

JQUERY

$('.pause').click(function(){
    $('#pausectrl').attr({
        src: 'images/pause1.png',
        class: 'paused' 
    });

    return false;
});

$('.play').mouseenter(function(){
    $(this).attr('src','images/play2.png');
}).mouseout(function(){
    $(this).attr('src','images/play1.png');
});

$('.paused').mouseenter(function(){
    $(this).attr('src','images/pause2.png');
}).mouseout(function(){
    $(this).attr('src','images/pause1.png');
});

这里是页面示例的链接。 MMA Slideshow controls sample

【问题讨论】:

    标签: jquery attr mouseout mouseenter


    【解决方案1】:

    您在链接上设置src。你想这样做:

    $(this).find('img').attr('src', 'myimage.png');
    

    【讨论】:

    • 首先,感谢您的帮助。 mouseover 和 mouseout 课程非常有意义。我纠正了这一点。我不确定我是否理解第二个问题。你指的是HTML中的链接吗?如果是这样,我将如何使用它?抱歉,我对 Jquery 很陌生,但学习很快。再次感谢。
    • 正确,您实际上是在设置&lt;a href="" id="play" class="pause" src="images/play2.png"&gt;。您想在&lt;img&gt; inside 上设置src &lt;a&gt;
    【解决方案2】:

    当你说:

    它也不会使用新的 mouseenter 和鼠标移出功能

    我猜这是因为当你的代码运行时,你的对象还没有类,所以它们没有绑定到事件处理程序。您可以使用 live 函数正确绑定您的事件。

    $('.pause').click(function(){
        $('#pausectrl').attr({
            src: 'images/pause1.png',
            class: 'paused' 
        });
      return false;
    });
    
    $('.play').live("mouseenter", function() {
      $(this).attr('src','images/play2.png');
    });
    
    $('.play').live("mouseout", function(){
      $(this).attr('src','images/play1.png');
    });
    
    $('.paused').live("mousenter", function() {
      $(this).attr('src','images/pause2.png');
    });
    
    
    $('.paused').live("mouseout", function(){
      $(this).attr('src','images/pause1.png');
    });
    

    【讨论】:

    • 谢谢。这是单击后状态不保持的问题。我仍然有第二次点击后它没有变回来的问题。
    • 为此,您可以使用切换功能而不是点击事件处理程序:api.jquery.com/toggle-event
    • 你是个天才!谢谢!现在就像一个魅力。我是 Stackoverflow 的新手。我应该把我完成的代码贴在这里,以防其他人有像我这样的问题吗?
    【解决方案3】:

    第二部分:

    $('.paused').mouseenter(function(){
      $(this).attr('src','images/pause2.png');
      }).mouseout(function(){
      $(this).attr('src','images/pause1.png');
    });
    

    您最好使用 jQuery 设置类名并使用 CSS 和 image sprites 进行图像替换。

    类似:

    .paused {background: url(/images/paused.png) 0 0 no-repeat;}
    .paused:hover {background-position: 0 15px;} /* Or whatever the position in the sprite */
    

    【讨论】:

    • 我选择将链接放在一个 div 上,因为我想控制链接的大小小于图像并让图像溢出 div。 (悬停时的文本超出框的约束)如果我使用精灵并允许溢出,整个事情不会显示出来吗?
    【解决方案4】:

    您将 src 设置在错误的标签上,请改用以下代码:

    $("img.play", $(this)).attr('src', 'thenewimage.png');

    '$(this)' 部分是 jQuery 尝试查找具有类 'play' 的图像的起始位置。我认为这是一个有效的解决方案..

    完整的js代码:

    $('.play').mouseenter(function(){
      $("img.play", $(this)).attr('src','images/play2.png');
      }).mouseout(function(){
      $("img.play", $(this)).attr('src','images/play1.png');
      });
    

    HTML 保持不变..

    $('.paused').mouseenter(function(){
      $("img.play", $(this)).attr('src','images/pause2.png');
      }).mouseout(function(){
      $("img.play", $(this)).attr('src','images/pause1.png');
      });
    

    `

    【讨论】:

    • 这对我来说很有意义,但它仍然无法正常工作。旧方法最初使用 mouseenter 和 mouseout 上的图像,但不是新方法。这不会将图像用于 mouseenter 或 mouseout。 pause1.png 图像在单击时加载,但在再次单击时不会变回。我只知道我错过了一些愚蠢的东西。
    • 你说'点击'?您的代码在 mouseEnter 而不是 onClick 上显示。如果您想在单击图像时更改图像,请参阅 jQuery 参考:api.jquery.com/click 对于所有鼠标事件和示例,请参阅:api.jquery.com/category/events/mouse-events
    • 不,我同时使用两者。当页面加载时,它会加载图像 play1.png。然后在 mouseEnter 上它变为 play2.png。如果你点击它,它应该会变成 pause1.png,然后如果你用 mouseEnter,它应该会变成 pause2.png。再次单击会将其带回播放图像。这就是两组 mouseEnter 和 mouseout 控件各自绑定到不同类的原因。 onclick 函数将调用类更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2015-04-21
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多