【问题标题】:JavaScript not recognizing backslash for desired outputJavaScript 无法识别所需输出的反斜杠
【发布时间】:2014-01-16 16:57:51
【问题描述】:

我这里有一个 JS 程序,它使用显示 HTML 和 CSS 生成 Code39 条形码来显示白线和黑线。 JS 文件很好,但我需要这段代码来生成一部分条形码作为反斜杠。问题是,常规的 Code39 都包含在脚本的数组和函数中,而扩展的 Code39 没有,那是包含反斜杠的部分。 (我试图达到的最终结果是输入文档的服务器路径并让它显示在条形码中。)

这可能有助于解释更多关于 Code39 的信息:http://en.wikipedia.org/wiki/Code_39

好的,这就是我所做的:在barcode.html 文件的第19 行之后,我输入了一个反斜杠。此处键入的任何内容都将显示在条形码下方的两个星号之间,并且当页面加载时,条形码将与下面的数字一致。 (我目前在反斜杠上附加了一个全黑的虚拟图案)。在 code39.js 文件的第 357 和 358 行,我添加了带有其他字符的反斜杠(当然使用了两个反斜杠)。我还在下面第 399 行和第 408 行的数组中添加了相同的内容,但我仍然无法让 JS 识别反斜杠,它只是在条形码上不断吐出一个“0”,这是我得到的结果输入了脚本中未指定的值。感谢您提供任何和所有帮助!

barcode.html 文件:

<!DOCTYPE html PUBLIC>
<html>
<head>
    <title>Barcode</title>
    <script type="text/javascript" src="code39.js"></script>
    <style type="text/css">
    #barcode {font-weight: normal; font-style: normal; line-height:normal; sans-serif; font-size: 12pt}
    </style>
</head>
<body>

Input : 123456<br/>
Barcode : Code39<br/>
Check Digit : 1 (On)<br/><br/>

Output : <br/><br/>

<div id="externalbox" style="width:5in">
<div id="inputdata" >\</div>
</div>

<br />

<script type="text/javascript">
/* <![CDATA[ */
  function get_object(id) {
   var object = null;
   if (document.layers) {
    object = document.layers[id];
   } else if (document.all) {
    object = document.all[id];
   } else if (document.getElementById) {
    object = document.getElementById(id);
   }
   return object;
  }
get_object("inputdata").innerHTML=DrawCode39Barcode(get_object("inputdata").innerHTML,1);
/* ]]> */
</script>

</body>
</html>

code39.js 脚本文件:

/*
 * Code39 barcode
 */

        function DrawCode39Barcode(data,
                           checkDigit)
        {
            return DrawHTMLBarcode_Code39(data,checkDigit,"yes","in", 0,3,1,3,"bottom","center", "","black","white"); 
        }

        function DrawHTMLBarcode_Code39(data,
                            checkDigit,
                            humanReadable,
                            units,
                            minBarWidth,
                            width,height,
                            barWidthRatio,
                            textLocation,
                            textAlignment,
                            textStyle,
                            foreColor,
                            backColor)
        {
            return DrawBarcode_Code39(data,
                         checkDigit,
                         humanReadable,
                         units,
                         minBarWidth,
                         width,height,
                         barWidthRatio,
                         textLocation,
                         textAlignment,
                         textStyle,
                         foreColor,
                         backColor,
                         "html");
        }

            function DrawBarcode_Code39(data,
                            checkDigit,
                            humanReadable,
                            units,
                            minBarWidth,
                            width,height,
                            barWidthRatio,
                            textLocation,
                            textAlignment,
                            textStyle,
                            foreColor,
                            backColor,
                            mode)
        {

              if (foreColor==undefined)
                foreColor="black";
              if (backColor==undefined)
                backColor="white";

              if (textLocation==undefined)
                textLocation="bottom";
              else if (textLocation!="bottom" && textLocation!="top")
                textLocation="bottom";
              if (textAlignment==undefined)
                textAlignment="center";
              else if (textAlignment!="center" && textAlignment!="left" && textAlignment!="right")
                textAlignment="center";
              if (textStyle==undefined)
                textStyle="";
              if (barWidthRatio==undefined)
                barWidthRatio=3;              
              if (height==undefined)
                height=1;
              else if (height<=0 || height >15)
                height=1;
              if (width==undefined)
                width=3;
              else if (width<=0 || width >15)
                width=3;
              if (minBarWidth==undefined)
                  minBarWidth=0;
              else if (minBarWidth<0 || minBarWidth >2)
                  minBarWidth=0;
              if (units==undefined)
                units="in";
              else if (units!="in" && units !="cm")
                units="in";
              if (humanReadable==undefined)
                humanReadable="yes";
              else if (humanReadable!="yes" && humanReadable !="no")
                humanReadable="yes";

              var encodedData=EncodeCode39(data,checkDigit);    
                    var humanReadableText = ConnectCode_Encode_Code39(data,checkDigit);
                var encodedLength = 0;
                    var thinLength = 0;
                    var thickLength = 0.0;
                    var totalLength = 0.0;
                    var incrementWidth = 0.0;
                    var swing = 1;
              var result="";
              var barWidth=0;
              var thickWidth=0.0;
              var svg;
                    if (barWidthRatio >= 2 && barWidthRatio <= 3)
                    {
                    }
                    else
                        barWidthRatio = 3;

                    for (x = 0; x < encodedData.length; x++)
                    {
                        if (encodedData.substr(x,1) == 't')
                        {
                            thinLength++;
                            encodedLength++;
                        }
                        else if (encodedData.substr(x,1) == 'w')
                        {
                            thickLength = thickLength + barWidthRatio;
                            encodedLength = encodedLength + 3;
                        }
                    }
                    totalLength = totalLength + thinLength + thickLength;

                    if (minBarWidth > 0)
                    {
                        barWidth = minBarWidth.toFixed(2);
                        width=barWidth * totalLength;
                    }
                    else
                        barWidth = (width / totalLength).toFixed(2);

                    thickWidth = barWidth * 3;
                    if (barWidthRatio >= 2 && barWidthRatio <= 3.0)
                    {
                        thickWidth = barWidth * barWidthRatio;
                    }

              if (mode=="html")
              {
                  if (textAlignment=='center')
                      result='<div style="text-align:center">';
                  else if (textAlignment=='left')
                      result='<div style="text-align:left;">';
                  else if (textAlignment=='right')
                      result='<div style="text-align:right;">';

                  var humanSpan="";
                  if (humanReadable=='yes' && textLocation=='top')
                  {
                    if (textStyle=='')
                        humanSpan='<span style="font-family : arial; font-size:12pt">'+humanReadableText+'</span><br />';
                    else
                        humanSpan='<span style='+textStyle+'>'+humanReadableText+'</span><br />';
                  }
                  result=result+humanSpan;
              }

                    for (x = 0; x < encodedData.length; x++)
                    {
                        var brush;
                        if (swing == 0)
                            brush = backColor;
                        else
                            brush = foreColor;

                        if (encodedData.substr(x,1) == 't')
                        {
                  if (mode=="html")
                    result=result
                         +'<span style="border-left:'
                         +barWidth
                         +units
                         +' solid ' 
                         +brush
                         +';height:'
                         +height
                         +units+';display:inline-block;"></span>';
                    incrementWidth = incrementWidth + barWidth;
                }
                        else if (encodedData.substr(x,1) == 'w')
                        {
                  if (mode=="html")
                    result=result
                         +'<span style="border-left :'
                         +thickWidth
                         +units+' solid ' 
                         +brush
                         +';height:'
                         +height
                         +units+';display:inline-block;"></span>';
                        incrementWidth = incrementWidth + thickWidth;
                }

                        if (swing == 0)
                            swing = 1;
                        else
                            swing = 0;
                    }

              if (mode=="html")
              {
                  var humanSpan="";
                  if (humanReadable=='yes' && textLocation=='bottom')
                  {
                    if (textStyle=='')
                        humanSpan='<br /><span style="font-family : arial; font-size:12pt">'+humanReadableText+'</span>';
                    else
                        humanSpan='<br /><span style='+textStyle+'>'+humanReadableText+'</span>';
                  }
                  result=result+humanSpan+"</div>";
              }
              return result;    
        }

            function EncodeCode39(data,checkDigit)
            {
                var fontOutput = ConnectCode_Encode_Code39(data,checkDigit);
                var output = "";
                var pattern = "";
                for (x = 0; x < fontOutput.length; x++)
                {
                    switch (fontOutput.substr(x,1))
                    {
                        case '1':
                            pattern = "wttwttttwt";
                            break;
                        case '2':
                            pattern = "ttwwttttwt";
                            break;
                        case '3':
                            pattern = "wtwwtttttt";
                            break;
                        case '4':
                            pattern = "tttwwtttwt";
                            break;
                        case '5':
                            pattern = "wttwwttttt";
                            break;
                        case '6':
                            pattern = "ttwwwttttt";
                            break;
                        case '7':
                            pattern = "tttwttwtwt";
                            break;
                        case '8':
                            pattern = "wttwttwttt";
                            break;
                        case '9':
                            pattern = "ttwwttwttt";
                            break;
                        case '0':
                            pattern = "tttwwtwttt";
                            break;
                        case 'A':
                            pattern = "wttttwttwt";
                            break;
                        case 'B':
                            pattern = "ttwttwttwt";
                            break;
                        case 'C':
                            pattern = "wtwttwtttt";
                            break;
                        case 'D':
                            pattern = "ttttwwttwt";
                            break;
                        case 'E':
                            pattern = "wtttwwtttt";
                            break;
                        case 'F':
                            pattern = "ttwtwwtttt";
                            break;
                        case 'G':
                            pattern = "tttttwwtwt";
                            break;
                        case 'H':
                            pattern = "wttttwwttt";
                            break;
                        case 'I':
                            pattern = "ttwttwwttt";
                            break;
                        case 'J':
                            pattern = "ttttwwwttt";
                            break;
                        case 'K':
                            pattern = "wttttttwwt";
                            break;
                        case 'L':
                            pattern = "ttwttttwwt";
                            break;
                        case 'M':
                            pattern = "wtwttttwtt";
                            break;
                        case 'N':
                            pattern = "ttttwttwwt";
                            break;
                        case 'O':
                            pattern = "wtttwttwtt";
                            break;
                        case 'P':
                            pattern = "ttwtwttwtt";
                            break;
                        case 'Q':
                            pattern = "ttttttwwwt";
                            break;
                        case 'R':
                            pattern = "wtttttwwtt";
                            break;
                        case 'S':
                            pattern = "ttwtttwwtt";
                            break;
                        case 'T':
                            pattern = "ttttwtwwtt";
                            break;
                        case 'U':
                            pattern = "wwttttttwt";
                            break;
                        case 'V':
                            pattern = "twwtttttwt";
                            break;
                        case 'W':
                            pattern = "wwwttttttt";
                            break;
                        case 'X':
                            pattern = "twttwtttwt";
                            break;
                        case 'Y':
                            pattern = "wwttwttttt";
                            break;
                        case 'Z':
                            pattern = "twwtwttttt";
                            break;
                        case '-':
                            pattern = "twttttwtwt";
                            break;
                        case '.':
                            pattern = "wwttttwttt";
                            break;
                        case ' ':
                            pattern = "twwtttwttt";
                            break;
                        case '*':
                            pattern = "twttwtwttt";
                            break;
                        case '$':
                            pattern = "twtwtwtttt";
                            break;
                        case '/':
                            pattern = "twtwtttwtt";
                            break;
                        case '+':
                            pattern = "twtttwtwtt";
                            break;
                        case '%':
                            pattern = "tttwtwtwtt";
                            break;
                        case '\\':
                            pattern = "tttttttttt";
                            break;
                default : break;
                    }
                    output=output+pattern;
                }
                return output;
            }

        function ConnectCode_Encode_Code39(data,checkDigit)
        {
            var Result="";
            var cd="";
            var filtereddata="";
            filtereddata = filterInput(data);
            var filteredlength = filtereddata.length;
            if (checkDigit==1)
            {
                if (filteredlength > 254)
                {
                    filtereddata = filtereddata.substr(0,254);
                }
                cd = generateCheckDigit(filtereddata);
            }
            else
            {
                if (filteredlength > 255)
                {
                    filtereddata = filtereddata.substr(0,255);
                }
            }
            Result = "*" + filtereddata+cd+"*";
              Result=html_decode(html_escape(Result));  
            return Result;
        }

        function getCode39Character(inputdecimal) {
            var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                            "A","B","C","D","E","F","G","H","I","J",
                            "K","L","M","N","O","P","Q","R","S","T",
                            "U","V","W","X","Y","Z","-","."," ","$",
                            "/","+","%","\\");
            return CODE39MAP[inputdecimal];
        }

        function getCode39Value(inputchar) {
            var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                            "A","B","C","D","E","F","G","H","I","J",
                            "K","L","M","N","O","P","Q","R","S","T",
                            "U","V","W","X","Y","Z","-","."," ","$",
                            "/","+","%","\\");
            var RVal=-1;
            for (i=0;i<43;i++)
            {
                if (inputchar==CODE39MAP[i])
                {
                    RVal=i;
                }
            }
            return RVal;
        }

        function filterInput(data)
        {
            var Result="";
            var datalength=data.length;
            for (x=0;x<datalength;x++)
            {
                if (getCode39Value(data.substr(x,1)) != -1)
                {
                    Result = Result + data.substr(x,1);
                }
            }
            return Result;
        }

        function generateCheckDigit(data)
        {
            var Result="";
            var datalength=data.length;
            var sumValue=0;
            for (x=0;x<datalength;x++)
            {
                sumValue=sumValue+getCode39Value(data.substr(x,1));
            }
            sumValue=sumValue % 43;
            return getCode39Character(sumValue);
        }

        function html_escape(data)
        {
            var Result="";
            for (x=0;x<data.length;x++)
            {
                Result=Result+"&#"+data.charCodeAt(x).toString()+";";
            }
            return Result;
        }

        function html_decode(str) {
            var ta=document.createElement("textarea");
              ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
              return ta.value;
        }

【问题讨论】:

  • 你能把你的代码减少到一个更小(最小)的大小写吗?
  • 如果您在barcode.html的第19行输入例如“123456”并加载页面,它将输出代表这些数字的条形码以及下面的123456条形码。我也需要这个 JS 将反斜杠识别为输出字符。它目前不识别反斜杠,只输出一个零。
  • 我包含了所有代码,因此您可以看到输出。对不起,只是想彻底。
  • 这是一个 JSFiddle:jsfiddle.net/8yZqG 预期的输出是什么?它输出一个条形码和*0*
  • 好的。在第 10 行输入 123456 代替反斜杠并查看结果。

标签: javascript barcode code39


【解决方案1】:

您的问题出在您的 getCode39Value() 函数中。

for (i = 0; i < 43; i++) {

您使用的是for i &lt; 43,实际上数组中有 44 个对象。你应该改用CODE39MAP.length

function getCode39Value(inputchar) {
    var CODE39MAP = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "-", ".", " ", "$", "/", "+", "%", "\\");
    var RVal = -1;
    for (i = 0; i < CODE39MAP.length; i++) {
        if (inputchar == CODE39MAP[i]) {
            RVal = i;
        }
    }
    return RVal;
}

http://jsfiddle.net/remus/GSFVG/

【讨论】:

  • 是的,我也发现了这个。 \ 给出了\0,我认为这是正确的?
【解决方案2】:

getCode39Value 很糟糕,因为它是一对一的。此实现也有效:

// moved outsite the function, it's a static map.
var CODE39MAP=new Array("0","1","2","3","4","5","6","7","8","9",
                    "A","B","C","D","E","F","G","H","I","J",
                    "K","L","M","N","O","P","Q","R","S","T",
                    "U","V","W","X","Y","Z","-","."," ","$",
                    "/","+","%","\\");

function getCode39Value(inputchar) {
    return CODE39MAP.indexOf(inputchar);
}

indexOf 已经返回 -1 如果没有找到。

【讨论】:

  • SUPER 更有效的方式 ;) 当然,如果你看一下代码,还有几个潜在的优化......
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2020-02-28
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多