jQuery在鼠标悬停时触发mousedown事件。

5

我有一个表格,想要在鼠标悬停和按下时更改单元格背景颜色,但我的当前解决方案不起作用:

function ChangeColor(sender) {

    sender.style.backgroundColor = 'yellow';

}

var clicking = false;


$(document).mouseup(function() {
    clicking = false;
});


$(document).ready(function() {
    $('#Table1 tr').each(function() {
        $('td', this).each(function() {
            $(this).mousedown(function() {
                clicking = true;
            });
            $(this).mousedown(function(event) {
                if (clicking==true) { ChangeColor(this); }
            });
        });
    });
});

有没有办法让它像那样工作?

鼠标悬停和在元素上按下不就是点击吗?还是我漏掉了什么? - Pharabus
我不太明白你想表达什么,mouseover!=click / mousedown = click。 - Jacob
2
我对它们的组合感到困惑,如果你在鼠标悬停在一个元素上时按下鼠标,则会触发单击事件,或者您是想要某种拖动选择? - Pharabus
是的,你可以说我在尝试实现一种拖动选择,就像使用绘画工具笔涂色像素一样 - 这有意义吗? - Jacob
1
我已经编辑了我的回答。我认为这就是你要找的。 - user113716
@jacob mousedown!=click. mousedown + mouseup = click - aamiri
1个回答

16

编辑:根据您上面的评论,您可以像这样做:

$(document).ready(function() {
    isMouseDown = false

    $('body').mousedown(function() {
        isMouseDown = true;
    })
    .mouseup(function() {
        isMouseDown = false;
    });

    $('Table1 tr td').mouseenter(function() {
        if(isMouseDown)
            $(this).css({backgroundColor:'orange'});
    });
});

当鼠标按下时,这将使td的背景变色。但仅在鼠标按下时才会生效。


听起来你只想在点击时更改颜色。如果是这种情况,那么它比你尝试的要简单得多。

$(document).ready() {

    $('#Table1 tr td').click(function() {
        $(this).css({backgroundColor:'yellow'});
    });

});

单击td元素时,它们的背景将变为黄色。

这类似于当你鼠标悬停时更改颜色。

编辑:刚注意到你问题的标题。

如果你想在悬停时触发点击...

$(document).ready() {

    $('#Table1 tr td').click(function() {
        $(this).css({backgroundColor:'yellow'});
    })
     .mouseenter(function() {
         $(this).click();
     });

});

当然,如果你这样做,则可以消除click事件,并只需使用mouseenter事件更改背景。


真是太聪明了,Patrick!它完全做到了我所期望的。我只是添加了'mousedown'来为单击单元格着色。谢谢! - Jacob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接