Javascript 特定函数的引用错误
我正在使用js代码应用阴影。当我的按钮背景颜色为白色时,它不会应用任何框阴影。但我的一个函数在未捕获的引用错误内 我的js文件是 我的Javascript 特定函数的引用错误,javascript,jquery,css,Javascript,Jquery,Css,我正在使用js代码应用阴影。当我的按钮背景颜色为白色时,它不会应用任何框阴影。但我的一个函数在未捕获的引用错误内 我的js文件是 我的hexConvert函数是 函数hexConvert(colorval){ var parts=colorval.match(/^rgb\(\d+)\s*(\d+)\s*(\d+)$/); 如果(!零件){ 返回null; } 删除(第[0]部分); 对于(var i=1;i我在您的代码中看到了很多潜在问题。并非所有问题都与您所询问的特定症状相关,但它们现在或将来
hexConvert
函数是
函数hexConvert(colorval){
var parts=colorval.match(/^rgb\(\d+)\s*(\d+)\s*(\d+)$/);
如果(!零件){
返回null;
}
删除(第[0]部分);
对于(var i=1;i我在您的代码中看到了很多潜在问题。并非所有问题都与您所询问的特定症状相关,但它们现在或将来可能会导致其他问题
首先,要将颜色值转换为十六进制格式,您只需调用hexConvert函数即可获得其副作用。该函数不会返回任何值(至少在大多数情况下,除非它返回null-请参见下文),而是设置一个全局color
变量,然后由代码的其他部分读取
然后,使用一个稀疏数组parts
,删除第一个元素,然后将其元素合并形成最终值
在hexConvert
函数中返回null
,但在函数调用后从未测试其返回值
如果在hexConvert
中没有匹配项,则返回null
,但仍然在color
全局变量中保留上一个值,该值将在每次正则表达式不匹配时调用hexConvert
后在其余代码中使用,除非是对该函数的第一次调用案例颜色
未定义,或可能由代码的其他部分设置其他值
假设颜色将采用rgb(r,g,b)
格式,如果是这样,为什么不直接将其与rgb(255,255,255)
进行比较以检查其是否为白色
你没有说你实际上得到了什么错误,在哪一行中,看到你的代码中还有多少其他可能的问题,你真的很难给出更精确的答案
请在或中发布一个工作示例。这里有一个将rgb转换为十六进制的函数,这是我不久前制作的…我希望它比您的更好:
var RgbToHex = function (string) {
if( /rgba?\(0,0,0,0\)/.test(string.replace(new RegExp(' ', 'g'), '')) ){
return "transparent";
}
var v = string.replace(/[rgb|ba()]/g, "").split(",");
var hex0 = parseInt(v[0]).toString(16);
var hex1 = parseInt(v[1]).toString(16);
var hex2 = parseInt(v[2]).toString(16);
return ('#' + (hex0.length == 1 ? "0" + hex0 : hex0).toString() + (hex1.length == 1 ? "0" + hex1 : hex1).toString() + (hex2.length == 1 ? "0" + hex2 : hex2).toString()).toLocaleUpperCase();
}
确切的错误是什么?在从$调用脚本之前,是否已将脚本包含在hexConvert
函数中。each()
?@RoryMcCrossan hexConvert被提升()请尝试背景色而不是背景色。我相信颜色将采用“rgb(255,255,255)的形式,不是六进制的。你确定parseInt
永远不会得到任何无法解析的parts[i]
吗?还有,你为什么要删除parts[0]
?嘿,我需要使用这个函数,这里是fiddle@MusaMuaz。这个fiddle什么都不做。你只是从你的问题中复制了代码,但你没有任何HTML可供使用,你没有加载jQuery等。你需要让这个fiddle实际做任何事情,并在任何人能够帮助你之前说你得到了什么和你期望得到什么你。你为什么说你需要使用这个函数呢?Uncaught ReferenceError:string没有在控制台中定义
,你必须向这个函数传递一个参数,比如RgbToHex('rgba(0,0,0,1))//返回#000000
。这个方法需要一个参数,否则它不能转换任何内容。请检查JSFIDLE。
function hexConvert(colorval) {
var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
if (!parts) {
return null;
}
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];
}
color = '#' + parts.join('');
}
var RgbToHex = function (string) {
if( /rgba?\(0,0,0,0\)/.test(string.replace(new RegExp(' ', 'g'), '')) ){
return "transparent";
}
var v = string.replace(/[rgb|ba()]/g, "").split(",");
var hex0 = parseInt(v[0]).toString(16);
var hex1 = parseInt(v[1]).toString(16);
var hex2 = parseInt(v[2]).toString(16);
return ('#' + (hex0.length == 1 ? "0" + hex0 : hex0).toString() + (hex1.length == 1 ? "0" + hex1 : hex1).toString() + (hex2.length == 1 ? "0" + hex2 : hex2).toString()).toLocaleUpperCase();
}