如何将此代码更改为鼠标悬停

时间:2013-12-05 17:34:32

标签: javascript jquery html css

我想将此代码更改为鼠标悬停。

// Login Form

$(function() {
    var button = $('#loginButton');
    var box = $('#loginBox');
    var form = $('#loginForm');
    button.removeAttr('href');
    button.mouseup(function(login) {
        box.toggle();
        button.toggleClass('active');
    });
    form.mouseup(function() { 
        return false;
    });
    $(this).mouseup(function(login) {
        if(!($(login.target).parent('#loginButton').length > 0)) {
            button.removeClass('active');
            box.hide();
        }
    });
});

当它们悬停在登录框和登录表单上时,它应该是可见的,否则登录表单应该被隐藏。现在当我们点击它时它会显示出来,当我们再次点击它时它会隐藏。

3 个答案:

答案 0 :(得分:2)

您想使用mouseovermouseout代替mouseup

$(function() {
    var button = $('#loginButton');
    var box = $('#loginBox');
    var form = $('#loginForm');
    button.removeAttr('href');
    button.mouseover(function() {
        box.show();
        button.addClass('active');
    });
    button.mouseout(function() {
        box.hide();
        button.removeClass('active');
    });
});

来自文档:

  

当鼠标指针进入元素时,鼠标悬停事件将发送到元素。任何HTML元素都可以接收此事件。

  

当鼠标指针离开元素时,mouseout事件将发送到元素。任何HTML元素都可以接收此事件。

这是一个简单的jsFiddle来演示:

http://jsfiddle.net/bryanjamesross/58TqM/1/

注意:您可能希望将这些事件附加到框和按钮的公共父级,以便在鼠标指针离开按钮时框不会隐藏。由于父容器在显示时会展开以适合框,因此您将能够与表单进行交互,直到鼠标离开父容器区域。

*编辑*:这是使用CSS实现预期效果的更新版本,而不是手动显示/隐藏表单:http://jsfiddle.net/bryanjamesross/58TqM/2/

答案 1 :(得分:0)

只需使用mouseenter和mouseleave。最后一个事件处理程序似乎在它外面点击时关闭了loginBox,你真的不需要它,但是将它作为一个额外的预防措施是没有害处的,所以如果由于某种原因mouseleave失败,用户可以关闭该框:< / p>

$(function() {
    var button = $('#loginButton'),
        box    = $('#loginBox'),
        form   = $('#loginForm');

    button.removeAttr('href').on('mouseenter mouseleave', function(e) {
        box.toggle();
        button.toggleClass('active');
    });

    $(document).on('click', function(e) {
        if( !($(e.target).closest('#loginButton').length)) {
            button.removeClass('active');
            box.hide();
        }
    });
});

答案 2 :(得分:0)

当鼠标悬停在#loginform上时,您需要添加一个事件。我建议使用mouseenter,因为鼠标悬停很吵,当你从窗体中的一个子元素移动到另一个子元素时,它会不止一次触发,并且当与mouseout一起使用时会引起闪烁。

$('#loginForm').mouseover(function() {
     button.toggleClass('active');
}
$('#loginForm').mouseleave(function() {
     button.toggleClass('active');
};

离开时你可能还需要mouseout()我不确定你什么时候要发射那个事件?从你的问题。