0

老实说,我想不出更好的标题,我是编写自己的 javascript 的新手。

基本上,我有以下脚本,它将一个hex值转换为一个rgb值:

$(".submit").click(function() {
    function hex2rgb(hex) {
        if (hex.length < 3) {
            $(".result").text("Error");
        }
        if (hex[0] == "#") {
            hex = hex.substr(1);
        }
        if (hex.length == 3) {
            var temp = hex;
            hex = '';
            temp = /^([a-f0-9])([a-f0-9])([a-f0-9])$/i.exec(temp).slice(1);
            for (var i = 0; i < 3; i++) hex += temp[i] + temp[i];
        }
        var triplets = /^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})$/i.exec(hex).slice(1);
        return {
            red: parseInt(triplets[0], 16),
            green: parseInt(triplets[1], 16),
            blue: parseInt(triplets[2], 16)
        }
    }
    var hex = $(".hex").val();
    var rgb = hex2rgb("#" + hex);
    $(".result").text("rgba(" + rgb.red + "," + rgb.green + "," + rgb.blue + ",1)");
});​

工作示例:http: //jsfiddle.net/charlescarver/JkeKV/5/

当文本框中输入的位数小于 3(不完整的hex代码)时,它将文本更改.result为错误。代码本身工作正常,但控制台抛出一个错误说......

TypeError: 'null' 不是对象(评估 '/^([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2}) $/i.exec(hex).slice')

我假设如果代码少于 3 位,它只会显示错误,而不是尝试继续if (hex.length == 3) {}运行,它似乎正在这样做。这是正确的吗?

另外,使用if (hex.length == 3) {}或转换为if (hex.length >= 3) {的函数会更好吗?我只是在想这个,因为位数必须是?hexrgb3 >= x <= 6

4

1 回答 1

1

它将移至下一条语句,因为当出现错误时您没有从函数中调用ifreturn

if (hex.length < 3) {
  $(".result").text("Error");
  return;
}

另一种方法是对通过该验证else的其余代码使用:

if (hex.length < 3) {
  $(".result").text("Error");
} else {
  if (hex[0] == "#") {
    // ...
}

关于您的其他问题,我会使用,if (hex.length >= 3 && hex.length <= 6) {}因为正如您所说,您想验证3 >= x <= 6.

于 2012-09-01T01:52:35.863 回答