2014-05-20 24 views
-4
function changeBGG1() { 
    var a = $('#vbox').css("backgroundColor"); 
    if (a == "#800000") { 
     $('#vbox').css("webkitAnimation", 'Red2Green 2s'); 
     $('#vbox').css("backgroundColor", '#004C00'); 
    } 
} 

我知道在條件檢查中有一個錯誤,但我不知道如何避免它,因爲沒有方法來解析顏色。如何避免if條件中的錯誤?

+0

您應該使用類設置動畫並檢查該類而不是 –

+1

jquery無法解析顏色十六進制格式。 – MegaMind

+0

即使它有,你不應該檢查一個CSS屬性,而是重新定義你的邏輯來使用一個類,並使用例如if($('#vbox')。hasClass('xxxx'))來檢查它' –

回答

3

在CSS中,背景色通常以rgb(...)格式返回,但不總是。如果涉及透明度,則格式爲rgba(...)。某些瀏覽器(尤其是較舊的瀏覽器)將使用#RRGGBB格式。

長話短說,你不能依靠價值backgroundColor進行任何形式的比較。

改爲使用.data()屬性。

+2

@ user3648908我認爲這個答案的闡述比你的問題的闡述更加***。 –

+1

@KingKing說得好! – vimal1083

0

嘗試此:)

$.fn.getHexBackgroundColor = function() { 
    var rgb = $(this).css('background-color'); 
    rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 
    function hex(x) {return ("0" + parseInt(x).toString(16)).slice(-2);} 
    return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); 
} 


function changeBGG1() { 
    var a = $('#vbox').getHexBackgroundColor(); 
    if (a == "#800000") { 
     $('#vbox').css("webkitAnimation", 'Red2Green 2s'); 
     $('#vbox').css("backgroundColor", '#004C00'); 
    } 
} 
+1

未捕獲ReferenceError:$未定義**第1行** 未捕獲TypeError:undefined不是函數**第8行** – MegaMind

+0

在任何其他javascript之前鏈接/導入jquery javascript – nicolallias

+0

@ user3648908不要將此代碼放在* line1 * ,只需將它放在jquery腳本標記之後即可 – vimal1083

0
var rgbString = "rgb(0, 70, 255)"; // get this in whatever way. 

var parts = rgbString.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 
// parts now should be ["rgb(0, 70, 255", "0", "70", "255"] 

delete (parts[0]); 
for (var i = 1; i <= 3; ++i) { 
    parts[i] = parseInt(parts[i]).toString(16); 
    if (parts[i].length == 1) parts[i] = '0' + parts[i]; 
} 
var hexString ='#'+parts.join('').toUpperCase(); 

通過該方法將RGB顏色可以被轉換成一個刺十六進制形式並像在JavaScript的字符串通常比較。