【发布时间】:2018-11-13 03:24:04
【问题描述】:
我有一些 div (.worker) 具有通过 Perl 生成的内联样式。悬停时,我想更改背景,然后恢复为 Perl 生成的样式。覆盖 .worker 的内联样式的唯一方法是使用 jQ.css。不幸的是,当我离开 .worker 时,它仍然是被覆盖的值。我试图捕获style属性并将其作为参数传递给.hover的回调,但它不起作用。
Perl 生成的内联样式:$html .= qq(<div class="worker" style="background:linear-gradient(to bottom right,@{[bgc($_)]},black)">$_</div>);
要覆盖的 jQ(然后返回到 Perl):
$('.worker').hover(function(){
var background = $(this)[0].style.background;
$(this).css('background','#FF9500');
}, function(background){
$(this).css('background',background);
这不起作用,正如我所提到的,我认为是因为 var background 的范围仅限于第一个函数,并且失去了回调的范围。
用 .css 更改后,有什么方法可以返回原始的内联样式?
编辑:感谢@Banzay 的回答。但是,现在我有一个连接的问题。当我左/右键单击 .worker div 时,我希望背景为白色,黑色。但是由于 .hover() 解决方案,bgc 变为白色 onclick,但当我将鼠标移出时,它又回到 Perl 生成的背景。
点击代码:
var NoName = $('#name').val();
$('.worker').click(function(){
var boxName = $('#name').val();
if (boxName != NoName && boxName.match(/\w/)) {
$(this).html(boxName[0].toUpperCase() + boxName.substring(1)).css({'background':'white','color':'black'}).removeClass('worker').addClass('assigned');
}
});
$('.worker').bind('contextmenu',function(e){
e.preventDefault();
$(this).html('-').attr('style','background:white').toggleClass('worker');
});
还有悬停代码:
$(".worker").hover(function(){
$(this).data('backgr', $(this).attr('style').split(":")[1]);
$(this).attr('style','background:#FF9500');
}, function(){
$(this).attr('style','background:' + $(this).data('backgr'));
});
从代码中,您可以看到我已尝试删除工人类,添加另一个类,并切换工人类。问题是工作类没有被删除,所以当我点击后离开 div 时,会调用 .hover() 导致 div 恢复为 Perl 内联样式。
如何在左/右键单击后移除悬停效果?
【问题讨论】:
-
考虑将变量放在函数“var background = $(this)[0].style.background;”之外,使其成为全局变量
-
@FridayAmeh 这确实适用于
$('.worker')[0],但现在它当然会抓住班级的第一个 div。有没有办法获取悬停的 div 的数组编号? -
var workingClass = document.getElementsByClassName("worker")[0]; -
@FridayAmeh
$('.worker')[0]只获取类的第一个实例。我在页面上有 27 个(这是一个时间表)。这就是我尝试使用this的原因。它以我悬停的 div 为目标。但是我无法告诉我将样式引用到回调,甚至说.mouseleave或其他什么。
标签: javascript jquery html css perl