Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 特定函数的引用错误_Javascript_Jquery_Css - Fatal编程技术网

Javascript 特定函数的引用错误

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我在您的代码中看到了很多潜在问题。并非所有问题都与您所询问的特定症状相关,但它们现在或将来

我正在使用js代码应用阴影。当我的按钮背景颜色为白色时,它不会应用任何框阴影。但我的一个函数在未捕获的引用错误内

我的js文件是 我的
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();
}