0

下面的代码显示了我的问题的简单视图。
显示的值直到 07778 才起作用,如下所示,出于某种原因操纵了该数字。曾经见过这样的事情。我想知道它是否与jquery有关?使用 1.7.1.min.js(是的,我知道它已过时,但我目前无权更新我们的网站。谢谢!

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript" src="/js/jquery-1.7.1.min.js"></script>

    <script>
        function ShowText(empid) {
            $("#text").text("Valule Passed To Function: " + empid)
            return false;
        }

    </script>
</head>
<body>
    <div id="text" class="text" style="margin-bottom:34px;"></div>

    <a onclick="ShowText(01133);return false;">01133</a>
    <br />
    <a onclick="ShowText(02133);return false;">02133</a>
    <br />
    <a onclick="ShowText(03133);return false;">03133</a>
    <br />
    <a onclick="ShowText(04133);return false;">04133</a>
    <br />
    <a onclick="ShowText(05133);return false;">05133</a>
    <br />
    <a onclick="ShowText(06133);return false;">06133</a>
    <br />
    <a onclick="ShowText(07133);return false;">07133</a>
    <br />
    <a onclick="ShowText(07500);return false;">07500</a>
    <br />
    <a onclick="ShowText(07700);return false;">07700</a>
    <br />
    <a onclick="ShowText(07750);return false;">07750</a>
    <br />
    <a onclick="ShowText(07770);return false;">07770</a>
    <br />
    <a onclick="ShowText(07777);return false;">07777</a>
    <br />
    <div style="border-bottom:solid 2px black; width:100%; text-align:center;">BROKEN :(</div>
    <div style="width:100%; text-align:center;">WORKING :)</div>
    <a onclick="ShowText(07778);return false;">07778</a>
    <br />
    <a onclick="ShowText(07779);return false;">07779</a>
    <br />
    <a onclick="ShowText(07780);return false;">07780</a>
    <br />
    <a onclick="ShowText(07799);return false;">07799</a>
    <br />
    <a onclick="ShowText(07800);return false;">07800</a>
    <br />
    <a onclick="ShowText(08000);return false;">08000</a>
    <br />
    <a onclick="ShowText(08133);return false;">08133</a>
    <br />
    <a onclick="ShowText(09133);return false;">09133</a>


</body>
</html>
4

2 回答 2

2

这很微妙,但是您在 JavaScript 处理数字的方式中遇到了一个有趣的怪癖。

ShowText(07778);

这行得通。所以我们会忽略它。[编辑-见下面的注释]

ShowText(07700);

这不会;它实际上给出了 4032 的值。你错过的是八进制的 7700 是十进制的 4032

因此,它不起作用的原因是 JavaScript 将您的以 0 为前缀的数字处理为八进制,这些数字不包含 '7' 以上的数字。只需删除前导零(无论如何您都将它们视为数字),或添加引号,您的代码就可以正常工作。

有关此行为的参考,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

尽管 ECMAScript 3 不鼓励并被 ECMAScript 5 禁止,但许多实现将以前导 0 开头的数字字符串解释为八进制。

注意:我们忽略它,因为它没有抛出错误。原因现在应该很明显了,因为 7778 不是一个有效的八进制数,所以解析器认为它实际上根本不是八进制,只是一个带有前导零的普通整数。

于 2013-08-16T11:43:47.193 回答
0

您不小心使用了八进制数,因为您的数字以前导零开头。删除前导零,您将获得预期的行为。

例如01133(base 8) 是603(base 10)。如果要保留前导零,请改用字符串。

于 2013-08-16T11:43:36.053 回答