2015-01-15 67 views
0

我在我的页面上有一个div,我想通过单击它来更改其背景。背景可以是“透明的”,无颜色,或红/粉红色。更改div背景firefox vs chrome

我有检查当前背景颜色并改变它基于该JavaScript函数:

if (buttonBackground == "transparent") { 
       //"rgba(0, 0, 0, 0)") { 
$('#delete_button_container_' + buttonNumber).css('background-color', '#ff9494'); 

} else if (buttonBackground == "rgb(255, 148, 148)") { 

$('#delete_button_container_' + buttonNumber).css('background', 'none'); 

} 

的问题是,对于一个透明的颜色,铬读取background-color属性为"rgba(0, 0, 0, 0)"但Firefox将其读作"transparent"。然而,他们都阅读背景颜色属性与颜色'#ff9494'为"rgba(0, 0, 0, 0)"

所以这显然是一个问题,如果我有if(透明)chrome不起作用,如果我有if (reba(0000))firefox不起作用。有想法该怎么解决这个吗?

+2

** **从未依靠浏览器返回正确的颜色,使用一个变量作为标志,而不是 – adeneo 2015-01-15 15:32:49

+0

也许用一个例子的答案帮助;) – 2015-01-15 15:34:10

+0

没有足够的代码来做到这一点! 'buttonNumber'来自哪里,这是一个循环,你需要每个元素被改变的标志,如果'data'有用,但是如何? – adeneo 2015-01-15 15:35:20

回答

1

我会用一个类来解决这个问题。您可以让delete_button_container的默认状态为透明或颜色,这并不重要,但可以添加一个覆盖该默认值的类来设置颜色。

HTML:

<div class="deleteButtonContainer transBackground"></div>

JS:

if($('#delete_button_container_' + buttonNumber).hasClass('transBackground')){ 
$(this).removeClass('transBackground'); 
} else { 
$(this).addClass('transBackground'); 
} 

CSS:

.deleteButtonContainer{ 
    background-color: rgb(255, 148, 148); 
} 

.deleteButtonContainer.transBackground{ 
    background-color: none; 
} 

编辑:改变了选择器的ID OP用使用。

+0

hmmm ... true但我无法做到这一点,我已经使用类/ Id为其他功能的原因,我相信...我将不得不看看我是否可以改变这一点,并使用这种方法 – 2015-01-15 15:42:47

+0

你可以添加尽可能多的课程,你想要的!而removeClass只会删除那个类,所以你不需要担心你设置的其他任何东西。 – 2015-01-15 15:44:15

+0

哦,我不知道,谢谢你的信息! – 2015-01-15 15:44:58

0

感谢意见,我做了以下内容和它的工作:

var transparent = false; 
if (buttonBackground == "transparent" || buttonBackground == "rgba(0, 0, 0, 0)") { 
       transparent = true; 
} 

if (transparent) { 
       //"rgba(0, 0, 0, 0)") { 
$('#delete_button_container_' + buttonNumber).css('background-color', '#ff9494'); 

} else if (buttonBackground == "rgb(255, 148, 148)") { 

$('#delete_button_container_' + buttonNumber).css('background', 'none'); 

} 
+1

您仍然依赖浏览器返回的内容。如果用户有一个旧的浏览器出于某种原因返回了十六进制,则全部失败。 – adeneo 2015-01-15 15:40:52

+0

你在杀我:)我猜下面的答案是更好的 – 2015-01-15 15:41:19

+0

理论上它是,但你根本不需要添加类或改变DOM,你可以使用jQuery的'data'来存储状态,全部你需要的是一个真或假的价值。 – adeneo 2015-01-15 15:42:22