2013-08-27 147 views
1

我在我的网站上有一个日历,打开显示RGB颜色选择器的弹出框。除IE8以外,它在所有浏览器中都可以正常工作。我的代码如下。无法获取未定义或空引用的属性'1'

function rgb2hex(rgb) { 
    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]); 
} 

这是错误

SCRIPT5007:未定义或空引用无法获取财产 '1'

指向此行

return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); 

我我不熟悉这段代码,因为它是由我的工作场所中有其他人完成的度假几个星期。如果有人能帮助我指出正确的方向,将不胜感激。

编辑

这是调用函数的地方。当我在IE8 console.log(bgColor)它显示为#rgb(238,238,238),所以我不明白为什么它不工作。也许这是我的愚蠢,但对我来说,我看不到它。

$('.period_day').click(function(e) { 
    var bgColor = $(this).css('background-color'); 

if (rgb2hex(bgColor) == "#eeeeee") { 
    $('.colour_picker').css('background-color', '#ff0000'); 
    $('#cal_colour_val').val('#ff0000'); 
} else { 
    $('.colour_picker').css('background-color', bgColor); 
    $('#cal_colour_val').val(bgColor); 
} 
}); 
+1

如果'bgColor'已经是十六进制('#eeeeee'),它应该很明显,为什么当它传递到'rgb2hex'时不起作用。 – Bergi

+0

抱歉,console.log(bgColor)显示为rgb(238,238,238)。它已经通过rgb2hex它是#eeeeee – Pooshonk

+0

@Pooshonk做'console.log(bgColor)'在Internet Explorer *中显示结果*具体是什么?不同的浏览器报告颜色不同。 – Pointy

回答

2

该错误表示正在使用与正则表达式不匹配的参数调用rgb2hex函数。匹配失败将导致变量rgb为空,并且该代码不检查该可能性。

因此真正的问题可能是的代码调用的功能。

+0

更新了我的问题 – Pooshonk

+0

终于设法解决了,谢谢帮忙! – Pooshonk

+1

@Pooshonk太棒了!如果您要通过编辑问题或添加评论来总结您发现的内容,未来可能对其他人有所帮助。 – Pointy

相关问题